JodaTime比较不同时区的两个日期



如果我比较两个DateTime与两个不同的时区,有问题,还是我应该让他在同一个时区?

的例子:

DateTimeZone a = new DateTimeZone("Pacific/Kiritimati");
    DateTimeZone b = new DateTimeZone("Pacific/Gambier");
    DateTime dateOne = new DateTime(a);
    DateTime dateTwo = new DateTime(b);
    if (dateOne.compareTO(dateTwo) == 0) {
        // yes
    } else {
        // no
    }

Thnak你。(抱歉我的英语不好)

人们总是混淆日期和时区。日期(或时间,或datetime)是时间中的特定瞬间。这个时刻在整个宇宙中都是相同的,所以它与时区无关,通常用UTC(世界时)或Z(祖鲁时间)表示。时区是对UTC的修改,以显示地球上这个特定区域的相对太阳时间。通过设置时区,你只是告诉这个datetime相对于这个特定的时区,但在内部它仍然会被表示为UTC。在这种情况下,如果时区有不同的UTC偏移量,它们应该是不同的。

Using java.time

Joda-Time项目现在处于维护模式,团队建议迁移到java。时间类。

您确实可以比较不同时区的日期时间对象。在内部,力矩被计算为自1970-01-01T00:00:00Z纪元以来的秒数(加上分数秒)。虽然每个指定的时区显示的挂钟时间不同,但它们的潜在含义是UTC时间线上的一个点。因此,任何一对日期时间对象都可以很容易地进行比较。

java。现在我们用ZonedDateTime来做这项工作。本课程提供isEqualisBeforeisAfter方法进行比较。

ZoneId zP_K = ZoneId.of( "Pacific/Kiritimati" ) ;
ZoneId zP_G = ZoneId.of( "Pacific/Gambier" ) ;
Instant instant = Instant.now() ;  // Current moment in UTC, with resolution up to nanoseconds.
ZonedDateTime zdtP_K = instant.atZone( zP_K ) ;
ZonedDateTime zdtP_G = instant.atZone( zP_G ) ;
Boolean sameMoment = zdtP_K.isEqual( zdtP_G ) ; // Or `isBefore` or `isAfter`.

查看此代码运行在IdeOne.com。

instant.toString (): 2017 - 06 - 15 t12:53:35.276z

zdtP_K.toString (): 2017 - 06 - 16 - t02:53:35.276 + 14:00(太平洋/Kiritimati)

zdtP_G.toString (): 2017 - 06 - 15 - t03:53:35.276上午9点(太平洋/甘比尔)

sameMoment:真

提示:你的大部分思维,你的业务逻辑,你的日志,你的数据交换/存储都在UTC。将UTC视为唯一的真实时间™,其他时区只是变化。仅在业务逻辑需要或为向用户表示而需要时应用时区。当你戴着程序员在工作的帽子时,忘记你自己的狭隘时区。


关于java.time

java。时间框架内置于Java 8及以后版本中。这些类取代了麻烦的旧的遗留日期时间类,如java.util.Date, Calendar, &SimpleDateFormat .

Joda-Time项目现在处于维护模式,建议迁移到java。时间类。

要了解更多信息,请参阅Oracle教程。并搜索Stack Overflow以获得许多示例和解释。规格为JSR 310。

从哪里获取java。时间类?

  • Java SE 8Java SE 9,以及更高版本
    • 内置。
    • 标准Java API的一部分,捆绑实现。
  • Java 9增加了一些小的特性和修复。
  • Java SE 6Java SE 7
    • 大部分java。时间功能向后移植到Java 6;7在 ThreeTen-Backport
  • Android
    • ThreeTenABP项目专门为Android适配ThreeTen-Backport(上文提到)。
  • 参见如何使用ThreeTenABP…
  • ThreeTen-Extra项目扩展了java。有额外课程的时间。这个项目是将来可能添加到java.time的试验场。您可以在这里找到一些有用的类,如IntervalYearWeekYearQuarter等。

    相关内容

    • 没有找到相关文章

    最新更新