java - 使用带时区的 Joda 解析日期

标签 java datetime date timezone jodatime

我有两个时间戳,它们以两种不同的格式描述同一时刻。

2010-10-03 18:58:072010-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/

相关文章:

date - 从Cloud_Firestore到日期的Flutter Dart错误格式时间步

shell - system() 产生不一致的结果

java - 在 JFrame 中打开 native 应用程序

java - Apache 使用 Java 显示旧错误

python:模块中的日期时间总是提供第一次调用的日期

c# - 以毫秒精度获取 DateTime.Now

bash - 在 MAC OSX 中比较 Bash 中的两个日期

java - 从 rsa 文件创建 keystore

Java:修改和访问在构造函数中初始化的变量

PHP 设置时区而不更改日期?