我有两个时间戳,它们以两种不同的格式描述同一时刻。
2010-10-03 18:58:07
和 2010-10-03T16:58:07.000+02:00
。
我使用 Joda-Time 解析具有两个不同日期格式化程序的时间戳。最后,我想要两个 DateTime 对象,它们在同一时刻是相等的。
DateFormatter 提供了多种方法来控制时区和语言环境,但我无法使用它。
这是我想要工作的代码:
final String date1 = "2010-10-03 18:58:07"; // Europe/Berlin local time
final DateTimeFormatter formatter1 = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
final DateTime dateTime1 = formatter1.parseDateTime(date1);
final String date2 = "2010-10-03T16:58:07.000+02:00"; // Europe/Berlin local time with time zone
final DateTimeFormatter formatter2 = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
final DateTime dateTime2 = formatter2.parseDateTime(date2);
Assert.assertTrue(dateTime1.isEqual(dateTime2));
最佳答案
如果您的默认时区是欧洲/柏林,则 2010-10-03 18:58:07 对应于 2010-10-03T16:58:07.000+00:00。
您可能误解了字符串表示中的时区字段。您的时间戳 2010-10-03T16:58:07.000+02:00 表示“在与 GMT 相差 +2 小时的时区中是 16:58:07”,或者换句话说“现在是 16 :58:07 in Berlin”。我假设您认为它的意思是格林威治标准时间 16:58:07?
关于java - 使用带时区的 Joda 解析日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4624992/