我正在尝试使用 "date":"2018-01-03"
等格式通过 JSON 发送日期,但在我的 Java 代码中我得到 2018-01-03 02 :00:00
而不是我期望的 2018-01-03 00:00:00
。似乎它正在为我的约会添加一些时区。这可以吗还是我错过了什么?
最佳答案
要表示仅日期值,请使用仅日期类型而不是日期+时间类型。
本地日期
LocalDate
表示没有时间和时区的日期。
LocalDate ld = LocalDate.of( "2018-01-03" ) ;
分区日期时间
要获取一天中的第一时刻,请指定时区。
ZoneId z = ZoneId.of( "Asia/Kolkata" ) ;
ZonedDateTime zdt = ld.atStartOfDay( z ) ;
即时
要查看 UTC 中的同一时刻,请从 ZonedDateTime
中提取 Instant
对象。
Instant instant = zdt.toInstant() ;
这些话题已经被讨论过很多次了。搜索堆栈溢出以获取更多信息。
<小时/>关于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类?
- Java SE 8 , Java SE 9 , 然后
- 内置。
- 是标准 Java API 的一部分,具有捆绑实现。
- Java 9 添加了一些小功能和修复。
- Java SE 6和 Java SE 7
- 许多 java.time 功能已向后移植到 ThreeTen-Backport 中的 Java 6 和 7 .
- Android
- ThreeTenABP项目专门针对 Android 改编了 ThreeTen-Backport(如上所述)。
- 参见How to use ThreeTenABP… .
ThreeTen-Extra项目通过附加类扩展了 java.time。该项目是 java.time future 可能添加的内容的试验场。您可能会在这里找到一些有用的类,例如 Interval
, YearWeek
, YearQuarter
,和more .
关于java - 从 JSON 反序列化时,时间会添加到日期中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48081873/