我怎样才能正确解析这个特定的日期?
How can I correctly parse this specific Date?
我无法为我的日期找到正确且干净的工作解决方案,格式如下:
2014-06-09T00:01+0200
(此处为 6 月 9 日)
我最后尝试的是:
DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mmXXX", Locale.ENGLISH);
这只是给我一个无法解析的日期异常。你认为我应该改变什么?
使用Z
代替XXX
或一个X
DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mmZ", Locale.ENGLISH);
Z Time zone RFC 822 time zone -0800
X Time zone ISO 8601 time zone -08; -0800; -08:00
将XXX
替换为Z
,
String dateTimestr = "2014-06-09T00:01+0200";
SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd'T'HH:mmZ");
s.parse(dateTimestr);
打印,
System.out.println(s.format(s.parse(dateTimestr)));
使用 Java 8,
OffsetDateTime dateTime = OffsetDateTime.parse("2014-06-09T00:01+02:00");
System.out.println(dateTime.toString());
请注意,OffsetDateTime.parse
只有在您的字符串是正确的 ISO8601 日期格式时才有效。如果您的日期格式不同,那么您必须使用 DateTimeFormatter
为您的 OffsetDateTime.parse()
提供适当的格式化程序。即
OffsetDateTime.parse(yourStringDate, DateTimeFormatter formatter)
问题是 XXX 需要带冒号的时区格式,即 2014-06-09T00:01+02:00
使用 Z 而不是 XXX 或使用 XX(2 个 X)应该接受不带冒号的格式
小心使用一些人发布的 X,因为这会忽略时区的最后两位数字(例如,2014-06-09T00:01+02)。如果在印度等时区偏移量为 +05:30 的国家/地区使用时区,这可能会出现问题。注意下面的代码..
System.out.println(new SimpleDateFormat("yyyy-MM-dd'T'HH:mmXXX").format(new SimpleDateFormat("yyyy-MM-dd'T'HH:mmX").parse("2014-06-09T00:01+05:30")));
将打印 2014-06-08T14:01-05:00。使用一个X时时区的:30丢失了。Documentation
我无法为我的日期找到正确且干净的工作解决方案,格式如下:
2014-06-09T00:01+0200
(此处为 6 月 9 日)
我最后尝试的是:
DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mmXXX", Locale.ENGLISH);
这只是给我一个无法解析的日期异常。你认为我应该改变什么?
使用Z
代替XXX
或一个X
DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mmZ", Locale.ENGLISH);
Z Time zone RFC 822 time zone -0800
X Time zone ISO 8601 time zone -08; -0800; -08:00
将XXX
替换为Z
,
String dateTimestr = "2014-06-09T00:01+0200";
SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd'T'HH:mmZ");
s.parse(dateTimestr);
打印,
System.out.println(s.format(s.parse(dateTimestr)));
使用 Java 8,
OffsetDateTime dateTime = OffsetDateTime.parse("2014-06-09T00:01+02:00");
System.out.println(dateTime.toString());
请注意,OffsetDateTime.parse
只有在您的字符串是正确的 ISO8601 日期格式时才有效。如果您的日期格式不同,那么您必须使用 DateTimeFormatter
为您的 OffsetDateTime.parse()
提供适当的格式化程序。即
OffsetDateTime.parse(yourStringDate, DateTimeFormatter formatter)
问题是 XXX 需要带冒号的时区格式,即 2014-06-09T00:01+02:00
使用 Z 而不是 XXX 或使用 XX(2 个 X)应该接受不带冒号的格式
小心使用一些人发布的 X,因为这会忽略时区的最后两位数字(例如,2014-06-09T00:01+02)。如果在印度等时区偏移量为 +05:30 的国家/地区使用时区,这可能会出现问题。注意下面的代码..
System.out.println(new SimpleDateFormat("yyyy-MM-dd'T'HH:mmXXX").format(new SimpleDateFormat("yyyy-MM-dd'T'HH:mmX").parse("2014-06-09T00:01+05:30")));
将打印 2014-06-08T14:01-05:00。使用一个X时时区的:30丢失了。Documentation