当前位置: 首页 > 知识库问答 >
问题:

Java 8 LocalDateTime有不同的结果

阎璞瑜
2023-03-14

我正在尝试更新一些代码,以使用Java 8的特性来解析多种日期格式。我机器上的本地时间设置为UTC-11。

以下代码在使用SimpleDateform时有效。

DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
Date correctDate = dateFormat.parse("2018-09-6T03:28:59.039-04:00");

//Gives me correct date  
System.println( correctDate);//Wed Sep 5th 20:28:59 GMT-11:00 2018

我正在尝试更新此代码,以使用Java 8中的DateTimeFormatter给出与上述相同的日期,以便我可以处理另一种日期格式。

DateTimeFormattter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss[.SSS]XXX");
LocalDateTime updateDate = LocalDateTime.parse( "2018-09-6T03:28:59.039-04:00", dtf);

//shows the wrong date of 2018-09-06 03:28:59.039.
System.out.println( updateDate.toString() );// 2018-09-06 03:28:59.039

[解决]我能够通过使用ZonedDateTime解决这个问题。

ZonedDateTime zdt = ZonedDateTime.parse("2018-09-6T03:28:59.039-04:00");
zonedDateTime = zdt.withZoneSameInstance(ZoneId.of("GMT"));

Date correctDate = Date.from( zonedDateTime.toInstance());

//更正日期是我想要的,星期三9月5日20:28:59 GMT-11:00 2018

共有2个答案

薛墨一
2023-03-14

已解决,使用公认“答案”中建议的OffsetDateTime:

OffsetDateTime ODT = OffsetDateTime . parse(" 2018-09-6t 03:28:59.039-04:00 ");< br > Date correct Date = Date . from(ODT . to instant());

后树
2023-03-14

将日期字符串解析为< code>LocalDateTime后,时区偏移量就会丢失,因为< code>LocalDateTime不保存任何时区或偏移量信息。当您再次将< code>LocalDateTime格式化为一个字符串时,您将只得到解析后的时间,而没有偏移量。

LocalDateTime的文档清楚地解释了这一点:

此类不存储或表示时区。相反,它是对用于生日的日期的描述,并结合挂钟上看到的当地时间。如果没有偏移量或时区等附加信息,它不能表示时间线上的瞬间。

您应该考虑使用< code>OffsetDateTime或< code>ZonedDateTime。

 类似资料:
  • 我有相同的数据和加密密钥,相同的算法,相同的模式,但不同的结果。 C#代码: 结果:13A6DAD3119F29A8C4BF6D5BD11564E4E1A93F85B7F2AD9E8E97756688754DE32A23ADE41DFD9F76186D8E25E66D0DCF458ECAA026F16463811C48FC814E50B10FF57FDDB0C0761088D1AC4DDDAE74

  • 问题内容: 我很难理解scikit-learn和scikit-learn之间的区别(如果有)。 试图预测具有不平衡类的二进制输出(Y = 1时约为1.5%)。 分类器 大鹏曲线 AUC的 和 有人可以解释这种差异吗?我以为两者都只是在计算ROC曲线下的面积。可能是因为数据集不平衡,但我不知道为什么。 谢谢! 问题答案: AUC并不总是在ROC曲线的曲线下方。曲线下面积为下(抽象)地区 的一些 曲线

  • 我正致力于直接在戈朗开发一个技术指标库。除其他外,这是学习戈朗语的练习。 我一直在验证我的算法的结果,方法是用TA-Lib(或者更确切地说是TA-Lib的ruby包装器)生成的数据构建测试用例。 上面的问题涉及浮点数学的一个非常简单的表现形式。很难确认一段较长的代码是否真的解决了这个问题。 我如何确认它只是浮点数学的变体,因为顺序? /结束编辑

  • 我在这里漏掉了什么?我试过上/下现金,每个字节之间的空格。我不确定还能试什么。 这个问题开始是因为我在Python中实现了这个,但在我担心代码之前,我试图理解为什么这是不同的。

  • 为什么在添加相同的数字时输出不同? 输出为: 如果我交换值 我得到的输出为:<代码>15.7000000000001 如何获得相同的输出?

  • 我有两个不同的CompletableFuture,我喜欢并行运行(每个都有不同的返回类型),然后结合它们的结果: 现在我喜欢把dog.name 我想用 但我在这里很烂。