java.util.Date 是不是将日期表示为系统日期? [复制]

Posted

技术标签:

【中文标题】java.util.Date 是不是将日期表示为系统日期? [复制]【英文标题】:Is java.util.Date represents date as system date or not? [duplicate]java.util.Date 是否将日期表示为系统日期? [复制] 【发布时间】:2012-06-15 13:21:34 【问题描述】:

我需要在 Java 中获取真实世界的日期和时间。我用:

Date date = new Date();

但我不确定这不仅仅是系统时间。我不需要依赖 PC 本地日期和时间。

如果是这样,那么有什么方法可以从中抽象出来吗?我的意思是我需要正确的时间和日期。如果今天是 2012 年 5 月 1 日,并且用户将其更改(可能存在系统错误)到 2000 年 12 月 1 日,则不应影响业务逻辑。那么有没有其他方法可以实现呢?

【问题讨论】:

查看以下相同的 SO 问题:***.com/questions/308683/… 我不确定这是否真的是重复的(至少不是指定问题之一)。我理解这个问题的方式是,如果系统时钟设置为错误的日期,目标是获得“真实世界的日期”。在这种情况下,答案是查询时间服务器。参见例如:***.com/questions/925191/java-ntp-client 【参考方案1】:

Date only 表示自 1970 年 1 月 1 日的 Unix 纪元 UTC (模闰秒)以来的一个瞬间,以毫秒为单位。它的数据中没有时区的概念。但是,如果您使用 toString 方法,它将始终使用系统时区将该 UTC 瞬间转换为本地日期/时间。这让很多用户感到困惑,让他们认为Date 包含一个时区——这只是一种错觉。

同样Date 没有任何日历系统(公历、儒略等)或“格式”的概念。基本上它只是一个long :)

【讨论】:

实际上,它比那晚了大约 24 秒,因为 Unix 时间忽略了闰秒。但它对当前的 UTC 是正确的,只是如果你想要历史的 UTC,它就会出错。 乔恩,这是否与您之前的引用略有矛盾,“java.util.Date 始终采用 UTC”,正如 answer 中所发布的那样? @adarshr:不是这样。 UTC 和其他任何东西一样多,因为它是根据 UTC 定义的。 @Julian:手动编辑 :) 那么,如果我在本地日期更改的机器上调用“new Date()”,业务逻辑将持续存在(其中某些部分很大程度上取决于实际日期)?

以上是关于java.util.Date 是不是将日期表示为系统日期? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

java.util.Date和java.util.Calendar及相关类

Java(timeimestampdata)转换

Cause: java.lang.IllegalArgumentException: invalid comparison: java.util.Date and java.lang.Str

java时间和日期类型

JAVASE02-Unit03: 日期操作 集合框架

无法从 String 值构造 java.util.Date 的实例 - 不是有效的表示