微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

joda年代表和DateTimeZone有什么区别?

如何解决joda年代表和DateTimeZone有什么区别?

特别是,为什么时区感知LocalTime的构造函数需要Chronology而不是DateTimeZone

    public LocalTime(
            int hourOfDay,int minuteOfHour,int secondOfMinute,int millisOfSecond,Chronology chronology)    // <--- this

为什么我们不能仅传递DateTimeZone来指定时区? ChronologyDateTimeZone有什么区别-它们似乎都只是用来在此处指定时区的?

这只是意味着我最终不得不通过调用ISOChronology.getInstance()来包装任何时区,这似乎很麻烦:

new LocalTime(18,ISOChronology.getInstance(DateTimeZone.forID("America/New_York")))

解决方法

TL; DR:在您的特定示例中没有区别。我找不到一个有任何区别的示例,尽管对LocalTime进行序列化可能会遇到一些极端情况。年表的时区将被忽略。

跳过LocalTime的源代码可以发现以下几点:

  • LocalTime始终在内部使用UTC时区。因此,无论您经过哪个时间顺序或时区,都不会得到我所说的时区感知LocalTime。因此,提供LocalTime(int,int,DateTimeZone)构造函数将毫无意义。
  • 年代{em} 由readResolve方法使用,这是反序列化方法。有Javadoc注释说明处理其他工具中的残破序列化。我不知道这是什么意思。在我看来,所有代码都要做的是确保存储在对象中的年表使用UTC时区。与根本不存储任何时间顺序相比,任何优势都让我感到失望。

这只是意味着我最终不得不通过调用来包装任何时区 ISOChronology.getInstance()看起来很麻烦:

new LocalTime(18,ISOChronology.getInstance(DateTimeZone.forID("America/New_York")))

LocalTime对象无论如何都会忽略时区。您使用的构造函数的文档说:

使用指定的值构造一个设置为指定时间的实例 年表,其区域被忽略。

所以我认为您也可以使用:

new LocalTime(18,0)

如果需要指定秒和/或毫秒,则可以提供三个或四个参数。 LocalTime类共有13个构造函数可供选择。

演示(并使您失望):

    LocalTime timeInNewYork = new LocalTime(18,ISOChronology.getInstance(DateTimeZone.forID("America/New_York")));
    System.out.println(timeInNewYork.getChronology().getZone());

输出:

UTC

要更直接地回答标题中的问题,Chronology类用于处理不同的日历系统,例如伊斯兰或佛教日历,这与DateTimeZone有所不同。而且在LocalTime的上下文中似乎并不需要立即执行某些操作,因此有充分的理由提出您的问题。

进一步的观察是,受Joda-Time启发的现代Java日期和时间API java.time完全分离了时间顺序和时区的概念。 java.time年表不包含时区。同样,java.time LocalTime对象既不使用时间顺序也不使用时区(除了其静态now方法非常合理地接受ZoneId参数;我认为这是不同的说法)。 / p>

如何解决?

那么我们如何与Joda创建一个可识别时区的LocalTime

编辑:这将产生多大的意义?对于每天在某个时区的特定时间发生的事件?当然,如果您要设计一个日历系统,您需要在其中存储一个事件,例如,发生在智利圣地亚哥每天16:00发生的事件,以及发生在纽约纽约每天18:00发生的另一个事件。你知道,我不知道。

要回答,据我所知,您不能。 LocalTime中的 local 表示无时区(虽然不明显,但确实如此)。

如果是我,则将一天中的时间分别存储在LocalTime中,并将时区存储在DateTimeZone中。这将为您提供所需的数据。您可以将这两部分包装到自己的类中,例如TimeZonedTime类。

java.time提供了一个OffsetTime类,一个带有偏移量的时间。因此,它不是时区识别时间,而只是UTC偏移量识别时间。不知道这对您是否有帮助,只是认为值得一提。

链接

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?