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及相关类
Cause: java.lang.IllegalArgumentException: invalid comparison: java.util.Date and java.lang.Str