我有SimpleDateFormat构造函数为
SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'")
我正在解析字符串“2013-09-29T18:46:19Z”。
我读到这里Z表示GMT/UTC时区。但是当我在控制台打印这个日期时,它为返回的日期打印IST时区。
现在我的问题是我的输出是对的还是错的?
我有SimpleDateFormat构造函数为
SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'")
我正在解析字符串“2013-09-29T18:46:19Z”。
我读到这里Z表示GMT/UTC时区。但是当我在控制台打印这个日期时,它为返回的日期打印IST时区。
现在我的问题是我的输出是对的还是错的?
当前回答
你没有设置时区,只是在日期/时间的末尾添加了一个Z,所以它看起来像一个GMT日期/时间,但这不会改变值。
将时区设置为GMT,将是正确的。
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
其他回答
“T”和“Z”在这里被认为是常数。你需要传递不带引号的Z。此外,您需要在输入字符串中指定时区。
例如:2013-09-29T18:46:19-0700 格式为"yyyy-MM-dd 'HH:mm:ssZ"
你没有设置时区,只是在日期/时间的末尾添加了一个Z,所以它看起来像一个GMT日期/时间,但这不会改变值。
将时区设置为GMT,将是正确的。
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
现有格式化程序的参考示例:
String date1 = "2022-06-19T01:26:05.000+00:00";
// internally using DateTimeFormatter.ISO_OFFSET_DATE_TIME
System.out.println(OffsetDateTime.parse(date1));
//internally using DateTimeFormatter.ISO_ZONED_DATE_TIME
System.out.println(ZonedDateTime.parse(date1));
String date2 = "2022-06-19T01:26:05";
//internally using DateTimeFormatter.ISO_LOCAL_DATE_TIME)
System.out.println(LocalDateTime.parse(date2));
String date3 = "2022-06-19T01:26:05.00Z";
//internally using DateTimeFormatter.ISO_INSTANT
System.out.println(Instant.parse(date3));
输出:
2022-06-19T01:26:05Z
2022-06-19T01:26:05Z
2022-06-19T01:26:05
2022-06-19T01:26:05Z
如果你没有选择去java8更好的使用 'yyyy-MM-dd' t ' hh:mm:ssXXX',因为这将再次被正确解析(而只有一个X可能不是这种情况……取决于你的解析函数)
X生成:+01
XXX生成:+01:00
对于Java 8: 你可以使用内置的java.time.format.DateTimeFormatter来减少任何输入错误的机会, 就像
DateTimeFormatter formatter = DateTimeFormatter.ISO_ZONED_DATE_TIME;
iso_zone_date_time代表2011-12-03T10:15:30+01:00[欧洲/巴黎],是Oracle link提供的捆绑标准DateTime格式之一