Java8:LocalDateTime或TimeStamp

Cat*_*ysm 5 java java-8

什么时候或哪里更优选?

我不确切知道它们之间究竟有什么区别.

来自LocalDateTime的文档

......时间表示为纳秒精度.例如,值"2007年10月2日13:45.30.123456789"可以存储在LocalDateTime中.

我假设LocalDateTime也可以接受,直到纳秒.所以我认为,我可以用LocalDateTime替换我的代码,这些代码被声明为TimeStamp.如果我错了,请纠正我.

场景:我们曾计划用Java-8升级我们的项目.修改了具有JAVA-8新功能的旧代码样式(例如:Lambda,Streams等;).但是我们在决定日期和时间时遇到了麻烦.大部分代码java.util.Date都改为java.time.LocalDatejava.time.LocalDateTime.对于TimeStamp的案例,我不知道这个问题

我们应该用LocalDateTime替换它们吗?

小智 7

在当前的开发中,您应该首选LocalDateTime和其他Java8时间类。

  • 它们提供了时间点定义(Instant)和持续时间(Duration)或基于片段的定义(LocalDateLocalTime)之间更清晰的分隔的优势。

  • 它们为操纵/计算逻辑提供了一套非常好的方法(与相对java.util.Date)。

  • 还涵盖了单位转换(Duration.toDays())。

  • 最后但并非最不重要的一点是时区地狱(ZonedDateTime)。

一个小缺点是您可能想利用很多第三方API缺乏支持。但这应该只是时间问题,而从Java8时间API到Calendar / Date的转换却没有成功。

如果您拥有成熟的软件,那么在使用上述某些优点之前,将风险替换为基于Java8的旧日期/日历接口只是一种风险。

如果要更换旧TimeStamp的东西的参数了Java8时间工具箱,然后可以选择使用的InstantLocalDateTimeZonedDateTime。区别在于,在进行计算时,Instant值是ZoneOffset.UTC基于基准处理的,而LocalDateTime根据定义,它与任何时区无关。

提示:LocalDateTime如果2018-01-02 10:24:12在印度这样的系统和美国这个系统应该发生某些事情,那么使用a 是一件很不错的事情。在几乎所有其他情况下,您可能更喜欢使用Instant或明确定义时区ZonedDateTime