首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java8 : LocalDateTime还是TimeStamp

Java8 : LocalDateTime还是TimeStamp
EN

Stack Overflow用户
提问于 2017-02-02 09:10:17
回答 2查看 14.7K关注 0票数 10

在何时何地哪个更可取?

我不知道他们之间到底有什么区别。

来自LocalDateTime的文档

...Time被表示为纳秒精度。例如,“2007年10月2日13:45.30.123456789”的值可以存储在LocalDateTime中。

我以为LocalDateTime也可以接受,直到nanoseconds.So,我想,我可以用LocalDateTime替换我的代码--这些代码被声明为TimeStamp。如果我错了,请纠正我。

场景:我们计划用Java-8升级我们的项目。修改旧代码风格与JAVA-8的新功能(例如:Lambda,Streams等)。但我们在决定日期和时间时遇到了麻烦。java.util.Date编码大部分改为java.time.LocalDatejava.time.LocalDateTime。对于TimeStamp的案例,我对这个问题一无所知

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-02 10:07:40

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

  • 它们提供了在时间点定义(Instant)和持续时间(Duration)或基于片段的定义(LocalDateLocalTime)之间更清晰地分离的优点。
  • 它们为操作/计算逻辑提供了一套非常好的方法(与java.util.Date不同)。
  • 此外,还包括单元转换(Duration.toDays())。
  • 最后但并非最不重要的是,Timezone地狱已经被覆盖(ZonedDateTime)。

一个小小的缺点是你可能想要利用很多第三方API缺乏支持。但是这应该只是时间问题,从Java8时间API到Calendar/Date的转换并不是展示的障碍。

如果您有一个成熟的软件,那么在您利用上面提到的一些优势之前,用基于Java8的接口替换旧的基于日期/日历的接口只是一个风险。

如果要用TimeStamp时间工具箱中的内容替换旧的Java8参数,则可以使用InstantLocalDateTimeZonedDateTime。区别在于,当涉及到计算时,Instant值是以基于ZoneOffset.UTC的方式处理的,而根据定义,LocalDateTime是没有任何时区关系的。

提示:使用LocalDateTime是一件很好的事情,如果在2018-01-02 10:24:12上发生了一些事情,比如印度的系统和美国的系统。在几乎所有其他情况下,您可能更喜欢使用InstantZonedDateTime显式定义时区。

票数 14
EN

Stack Overflow用户

发布于 2017-02-02 09:39:09

java.util.Datejava.sql.Timestamp实际上都是java.time.Instant的等价物,而不是LocalDateTime,日期时间戳和即时是Unix时间的实例,而LocalDateTime是当前时区的DateTime。

您可以清楚地看到这一点,因为这两个类都具有这个很好的方法(从java.util.Date继承):

代码语言:javascript
复制
java.util.Date::toInstant

我认为您用LocalDate替换LocalDate的意思是,您实际上是在替换java.sql.Date,而不是java.util.Date。现在,sql.Date是LocalDate的等价物,并不等同于Instant,因为sql.Date缺少时间组件(尽管sql.Date是util.Date的子类,但对它调用getSeconds()将导致异常)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41998144

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档