Is java.util.Date represents date as system date or not?
我需要用Java获取真实世界的日期和时间。 我用:
但我不确定这不仅仅是系统时间。 我不需要依赖PC本地日期和时间。
如果是这样,那么有没有办法从中抽象出来? 我的意思是我需要正确的时间和日期。 如果今天是2012年5月1日,并且用户在2000年12月1日更改了(可能存在系统错误),则不应影响业务逻辑。 那么有没有替代方法来实现这一目标?
-
请参阅以下相同的SO问题:stackoverflow.com/questions/308683/…
-
我不确定这是否真的重复(至少不是指定问题之一)。 我理解这个问题的方式,目标是获得"真实世界日期",如果系统时钟设置错误的日期。 在这种情况下,答案是查询时间服务器。 例如:stackoverflow.com/questions/925191/java-ntp-client
-
@martin是的,你是对的
Date仅表示自1970年1月1日UTC(模数闰秒)的Unix纪元以来的瞬间,以毫秒为单位。 它的数据中没有时区概念。 但是,如果使用toString方法,它将始终使用系统时区将该UTC时刻转换为本地日期/时间。 这让很多用户感到困惑,让他们认为Date包含一个时区 - 这只是一种幻觉。
同样,Date没有日历系统(Gregorian,Julian等)或"格式"的任何概念。 基本上它只是一个long :)
-
实际上,它比那时晚了大约24秒,因为Unix时间忽略了闰秒。但它对当前的UTC来说是正确的,只要你想要历史性的UTC它就错了。
-
Jon,这是否与您之前的引言略有矛盾,"java.util.Date总是以UTC为单位",如此答案中所述?
-
@adarshr:不是。它的UTC与任何东西一样多,因为它是用UTC定义的。
-
@Julian:用手工编织的方式编辑:)
-
那么,如果我在本地日期发生变化的机器上调用"new Date()",那么业务逻辑将会持续存在(某些部分在很大程度上取决于实际生活日期)?
-
@Dragon:"当地日期改变了"是什么意思?如果你只是指时区,那就没有任何区别。但是会看到非区域变化,是的。 new Date()仅使用系统时钟,而不是NTP等。
-
@Jon Skeet:是的,这取决于系统时钟。但有没有办法从中抽象出来?我的意思是我需要正确的时间和日期。如果今天是2012年5月1日,并且用户在2000年12月1日更改了(可能存在系统错误),则不应影响业务逻辑。那么有没有替代方法来实现这一目标?
-
@Dragon:您必须与外部源(例如NTP服务器)通信。如果你不相信任何本地的东西,你将不得不通过网络。