java中java.util.Date和java.time.LocalDate的区别

lim*_*srs 4 java date systemtime java.util.date localdate

java.util.Date我想知道和之间的区别java.time.LocalDate

我听说这java.time.LocalDate会带来用户环境时间,而不是服务器时间,但我想知道这是否属实。

换句话说,如果用户操纵他或她的系统时间,我想知道它是否算作更改时间,而不是服务器时间。

Ole*_*.V. 9

避免java.util.Date

\n\n

主要区别是:对于新代码,您应该使用LocalDate来表示日历日期,而不是java.util.Date. Date设计不佳且早已过时,您绝对没有理由要使用它。

\n\n

用户环境时间与服务器时间

\n\n

LocalDate为您提供设置的日期(而将 a 设置Date为特定日期并不简单,但也是可能的)。尝试将LocalDate(或Date) 设置为 \xe2\x80\x9ctoday\xe2\x80\x9d 或 \xe2\x80\x9cnow\xe2\x80\x9d 所得到的结果取决于以下几件事:

\n\n
    \n
  • 您从中获取时间的时钟,同样取决于您的设置/架构
  • \n
  • 时区
  • \n
\n\n

两者Localdate.now(desriedTimeZone)new Date()将从运行它们的计算机上获取时间。因此,如果您在 user\xe2\x80\x99s 计算机上运行 Java 客户端,并且用户篡改了该计算机上的时钟,则它们都可能给您提供错误的时间。

\n\n

另一方面,如果客户端已连接到您控制的服务器,则\xe2\x80\x99应该很难从该服务器获取当前日期和时间(除了所产生的延迟,可能远小于一秒)。

\n

  • *“另一方面,如果客户端已连接到您控制的服务器......”* - 问题是,如果用户通过欺骗时钟来绕过过期的许可证密钥,那么他们也可能会阻止应用程序对外部时间源的访问,或将连接重定向到假时间服务器。 (2认同)

小智 6

java.util.Date自JDK1.0起就出现在Core java API中,但是java.time.LocalDate是在java 1.8版本的Java API中引入的。

LocalDate 表示不带时间的 ISO 格式 (yyyy-MM-dd) 的日期。它可用于存储生日和发薪日等日期。

实际上,Java 1.8 中引入了这个新的 Time-Date,以提供不变性和线程安全性。并提供支持最常见操作的各种实用方法。

您可以参考以下内容了解更多详情:

Java 中两个日期之间的差异

使用 Java 8 日期时间