阅读您的 API 文档
您应该阅读有关向您发送此数据的任何 Web 服务的文档。
第一部分似乎是自 1970 UTC 开始的纪元以来的毫秒数。第二部分-0500 似乎是 UTC 后五个小时的 UTC 偏移量。但这只是一个猜测。您只能通过阅读文档来确定零件并解决下面讨论的歧义才能确定。
解析
所以首先将连字符上的字符串拆分为两个子字符串,如discussed in this Question。
接下来,将计数解析为Instant。讨论in this Question。
Instant instant = Instant.ofEpochMilli( countOfMillisecondsFromEpochNumberPortionOfInput );
调整
你如何解释这种组合是模棱两可的。 UTC 中的毫秒数是否应该调整五个小时?还是计数已经调整为五个小时?
另一个歧义:减号是表示 UTC 的“落后”还是“领先”?当前的做法通常是“落后”的,但一些较旧的做法意味着“领先”。我会假设“落后”。
我将假设计数旨在以 UTC 为单位,然后通过应用ZoneOffset 将其调整为比 UTC 晚 5 小时。一天中的时间和可能的日期将发生变化,以表示同一时刻被视为不同的wall-clock time。
ZoneOffset offset = ZoneOffset.of( offsetStringPortionOfInput );
OffsetDateTime odt = instant.atOffset( offset ); // time-of-day and perhaps date will change to represent the same simultaneous moment viewed as a different wall-clock time.
关于java.time
java.time 框架内置于 Java 8 及更高版本中。这些类取代了旧的麻烦的日期时间类,例如java.util.Date、.Calendar 和java.text.SimpleDateFormat。
Joda-Time 项目现在位于maintenance mode,建议迁移到 java.time。
要了解更多信息,请参阅Oracle Tutorial。并在 Stack Overflow 上搜索许多示例和解释。
大部分 java.time 功能在ThreeTen-Backport 中向后移植到Java 6 和7,并进一步适应ThreeTenABP 中的Android。
ThreeTen-Extra 项目通过附加类扩展了 java.time。该项目是未来可能添加到 java.time 的试验场。