java - yyyymmdd - simpledateformat timezone




Java SimpleDateFormat(“yyyy-MM-dd'T'HH:mm:ss'Z'”)给出了时区为IST (4)

'T''Z'在这里被认为是常量。 你需要通过Z而不用引号。 此外,您需要在输入字符串中指定时区。

例如: 2013-09-29T18:46:19-0700格式为"yyyy-MM-dd'T'HH:mm:ssZ"

我有SimpleDateFormat构造函数

SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'")

我正在解析字符串"2013-09-29T18:46:19Z".

我已经读过,这里Z代表GMT/UTC时区。 但是当我在控制台上打印这个日期时,它会打印返回日期的IST时间。

现在我的问题是我的输出是对还是错?


从ISO 8601字符串到Java日期对象

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
sdf.parse("2013-09-29T18:46:19Z"); //prints-> Mon Sep 30 02:46:19 CST 2013

如果你没有设置TimeZone.getTimeZone("GMT")那么它会输出Sun Sep 29 18:46:19 CST 2013

从Java日期对象到ISO 8601字符串

并将Date对象转换为ISO 8601标准( yyyy-MM-dd'T'HH:mm:ss'Z' )使用以下代码

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.US);
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));           
System.out.println(sdf.format(new Date())); //-prints-> 2015-01-22T03:23:26Z

还要注意,如果没有' '在Z yyyy-MM-dd'T'HH:mm:ssZ打印2015-01-22T03:41:02+0000


如果你想处理日期的' standard 'JSON表示,那么最好使用这种模式: "yyyy-MM-dd'T'HH:mm:ssX"

最后注意X 它将处理ISO 8601标准中的时区 ,而ISO 8601正是在Javascript中生成此语句的new Date().toJSON()

与其他答案相比,它有一些好处:

  1. 您无需要求您的客户以格林威治标准时间发送日期
  2. 您不需要使用以下sdf.setTimeZone(TimeZone.getTimeZone("GMT"));将Date对象显式转换为GMT: sdf.setTimeZone(TimeZone.getTimeZone("GMT"));

如果您没有选择继续使用java8,请使用'yyyy-MM-dd'T'HH:mm:ssX XX ',因为这会再次正确解析(而只有一个X,这可能不是这种情况。 ..取决于你的解析功能)

X生成:+01

XXX会生成:+01:00





simpledateformat