【问题标题】:Joda time getting right time from dateTime乔达时间从 dateTime 得到正确的时间
【发布时间】:2023-03-08 00:07:01
【问题描述】:

我有这个简单的代码:

    DateTimeFormatter formatter = DateTimeFormat.forPattern("HH:mm yyyy-MM-dd");

    DateTime dateTime = formatter.withZone(DateTimeZone.forID("America/New_York")).parseDateTime("08:30 2015-06-01");
    DateTime dateTime2 = formatter.withZone(DateTimeZone.forID("America/New_York")).parseDateTime("08:30 2015-12-01");

这些是闰时间。当我点击 toString 方法时,我得到了这样的结果:

2015-06-01T08:30:00.000-04:00
2015-12-01T08:30:00.000-05:00

这是正确的,我们可以看到 UTC 时间 - 偏移量。但是当我调用 getHourOfDay 时,我得到了 8 而不是预期的 4/3。我究竟做错了什么?请在这里分享一些建议。

【问题讨论】:

    标签: java datetime timezone jodatime


    【解决方案1】:

    好吧,来自DateTimeFormatter#withZone() 的 Javadoc:

    返回一个新的格式化程序,它将优先使用指定区域,而不是打印对象的区域,或解析的默认区域。

    所以,您告诉格式化程序在解析 AND 输出时使用特定时区,而您给它的输入不包含时区,所以这是预期的结果。本质上你说:

    1. 这是一个没有时区的日期字符串,假设 America/New_York 对其进行解析
    2. 将日期转换回字符串,在时区 America/New_York 中

    它就是这么做的。

    【讨论】:

    • 太好了。所以考虑到我有UTC时间并且我需要ET(纽约)时间,我需要在没有任何区域的情况下解析它,然后像这样打印它: System.out.println(dateTime.withZone(DateTimeZone.forID("America/New_York" )).getHourOfDay()); ?
    • 如果输入是 UTC,则字符串必须包含时区,否则您必须明确告诉系统它是 UTC。
    猜你喜欢
    • 2019-08-04
    • 1970-01-01
    • 2014-05-06
    • 2013-03-18
    • 1970-01-01
    • 2015-11-28
    • 1970-01-01
    • 2021-08-17
    • 1970-01-01
    相关资源
    最近更新 更多