gpt4 book ai didi

Java - 将 .NET 日期转换为 LocalDateTime

转载 作者:行者123 更新时间:2023-11-30 02:38:51 25 4
gpt4 key购买 nike

我正在使用第三方服务,该服务会按以下格式返回日期:

"EndDate":"\/Date(1487615921387-0300)\/","StartDate":"\/Date(1487608721387-0300)\/"

我的问题是将此日期转换为 LocalDateLocalDateTime。我在这里找到了一些答案,但他们使用的是 joda 时间,所以没有帮助。

最佳答案

您需要了解输入数据的含义。

最后一部分-0300可能是offset-from-UTC ,提前或落后几个小时 UTC 。我建议使用带冒号的格式 (-03:00),但不带冒号也是可以接受的。您需要知道加号/减号是否表示 UTC 之前或之后。现代协议(protocol)倾向于在 UTC 之前使用,在 UTC 后面使用,但也有一些协议(protocol)的做法相反。

要知道偏移量不是时区。一个time zone是特定区域的偏移历史记录,具有异常规则,例如 Daylight Saving Time (DST)

第一部分可能是自 epoch reference date 以来的毫秒数。 。我们可以猜测您的纪元是 UTC 中常用的 1970 年第一时刻 (1970-01-01T00:00:00)。但至少有a couple dozen epochs被各种已知的软件系统使用。同样,您必须查阅数据来源。

这种特殊的纪元计数与偏移量的组合我以前见过。这让我感到困惑,因为在 UTC 中简单地使用不带偏移量的纪元计数更有意义。如果要显示调整为时区的日期时间,请使用标准 ISO 8601字符串格式。

我猜测您输入的数字是 UTC 纪元(以毫秒为单位)的计数。因此我们将其解析为一个 Instant 对象。 Instant类代表UTC中时间线上的一个时刻。分辨率为nanoseconds (最多九 (9) 位小数)。

String input = "1487615921387-0300";

String inputCount = input.substring ( 0 , 13 ); // zero-based index counting.
long count = Long.parseLong ( inputCount );
Instant instant = Instant.ofEpochMilli ( count );

我们可以将偏移量解析为 ZoneOffset对象。

String inputOffset = input.substring ( 13 );
ZoneOffset offset = ZoneOffset.of ( inputOffset );

应用ZoneId看到与 wall-clock time 相同的时刻在另一个偏移量中为 OffsetDateTime .

OffsetDateTime odt = instant.atOffset ( offset );

查看此code run live at IdeOne.com .

input: 1487615921387-0300

inputMillis: 1487615921387

inputOffset: -0300

count: 1487615921387

instant.toString(): 2017-02-20T18:38:41.387Z

odt.toString(): 2017-02-20T15:38:41.387-03:00

请注意instantodt 之间的三个小时差异,即18 小时与15 的效果,抵消。仍然是相同的同时时刻,时间轴上的相同点,但以不同的挂钟时间看到。

<小时/>

关于java.time

java.time框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧类 legacy日期时间类,例如 java.util.Date , Calendar , & SimpleDateFormat .

Joda-Time项目,现在位于 maintenance mode ,建议迁移到java.time类。

要了解更多信息,请参阅 Oracle Tutorial 。并在 Stack Overflow 上搜索许多示例和解释。规范为JSR 310 .

从哪里获取java.time类?

ThreeTen-Extra项目通过附加类扩展了 java.time。该项目是 java.time future 可能添加的内容的试验场。您可能会在这里找到一些有用的类,例如 Interval , YearWeek , YearQuarter ,和more .

关于Java - 将 .NET 日期转换为 LocalDateTime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42351307/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com