当前位置: 首页 > 知识库问答 >
问题:

Java8:本地日期时间或时间戳

方宜
2023-03-14

何时何地哪个更可取?

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

来自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替换它们吗?

共有2个答案

丌官和泰
2023-03-14

和java.util。日期java.sql。时间戳实际上等同于java.time。Instant,而不是<code>LocalDateTime,日期时间戳和Instant是Unix时间的实例,而LocalDate时间是当前时区中的日期时间。

您可以清楚地看到,因为两个类都有这个好方法(继承自< code>java.util.Date):

java.util.Date::toInstant

我假设你用LocalDate替换Date的意思是你实际上是在替换java.sql.Date,而不是java.util.Date。现在,sql.Date 是 LocalDate 的等效项,并不等同于 Instant,因为 sql.日期缺少时间组件(尽管有 sql.日期是 util 的子类。Date,在其上调用 getSeconds() 将导致异常)。

凌轶
2023-03-14

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

> < li>

它们的优势在于时间点定义(< code>Instant)和持续时间(< code>Duration)或基于片段的定义(< code>LocalDate,< code>LocalTime)之间的区分更加清晰。

它们允许一组非常好的操作/计算逻辑方法(与java.util.Date不同)。

此外,还涵盖了单位转换(Duration.toDays())。

最后但并非最不重要的是时区地狱被覆盖(ZonedDateTime)。

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

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

如果要将旧的 TimeStamp 参数替换为 Java8 时间工具箱中的内容,则可以使用 InstantLocalDateTimeZonedDateTime。不同之处在于,在计算方面,即时值作为基于ZoneOffset.UTC的处理,而LocalDateTime根据定义没有任何时区关系。

提示:如果在<code>2018-01-02 10:24:12Instant或ZonedDateTime,显式定义时区。

 类似资料:
  • 问题内容: 我正在尝试将一个实例转换为一个实例。 我没有得到编译器错误,但是实例值是错误的。 我认为这不起作用,因为它存储时间而不是。 我正在使用JDK 1.8版。 问题答案: 您的输入实际上是一个。简单地将其解析为a 然后从中获取会更简单。无需担心时区,无需保留某些传统课程(避免并在可能的情况下…)

  • 我有一个简单的JavaLocalDateTime如下: 它的结果是: 我希望是2021年3月23日下午1点17分 我在这里错过了什么?

  • 问题内容: 从服务器上,我得到了这种格式的datetime变量:它是UTC时间。我想使用JavaScript将其转换为当前用户的浏览器时间。 如何使用JavaScript或jQuery完成此操作? 问题答案: 在将字符串转换为javascript中的日期之前,将’UTC’附加到字符串中:

  • 目前我有一张包含以下条目的地图, 如何确定当前LocalDateTime是否介于两个时间之间?例如,如果当前时间为,则需要获取值。

  • 我需要一些解释为什么这个代码不编译: 错误: 类型Duration中的(TemporalAmount)方法不适用于参数(ChronoUnit) 正如本文所述: public static Duration from(TemporalAmount amount)从时间量中获取持续时间的实例。这将根据指定的金额获得持续时间。TemporalAmount表示一个时间量,可以是基于日期的,也可以是基于时间

  • 我想做一个考勤应用程序,我真的很困惑iOS和Firebase中的日期和时间。