我使用Java Swing开发了一个桌面应用程序,并且需要一些功能并且取决于日期。
现在问题是如果我这样做:
C2
将打印此public T GetClassInstance<T>(DateTime start) where T : IHasStartTime, new()
。
现在,如果我在Windows日历中更改日期,这个日期也会发生变化,我不需要System.out.println(new Date());
更改操作系统日期更改吗?我怎么能这样做?
答案 0 :(得分:0)
本地计算机中只有一种计时源:内置于主机中的硬件时钟,由主机操作系统(OS)管理。
JVM从主机操作系统(因此从硬件时钟)获取当前时刻。 JVM会维护自己的当前默认时区,以通过该时区来解释/调整该时刻。但是,此时,即时间轴上的时间点,是通过操作系统从您的硬件时钟报告的,而Java仅在该对话的侦听端。
因此,是的,如果具有管理员特权的用户错误地更改了主机硬件时钟的设置,则可以,Java将报告错误的日期时间。
如果您的问题是:“如何在不信任本地计算机的情况下从本地计算机中获取Java的当前时间?”,从逻辑上讲,这是不可能的。
如果准确确定当前时刻对您的应用至关重要,并且您不信任托管JVM的计算机上的时钟,那么您将需要外部时间。
仅供参考,可怕的Date
现在已遗留,不再使用。替换为Instant
。两者都代表UTC的时刻(尽管Date::toString
告诉您的谎言)。
Instant instant = Instant.now() ; // Capture the current moment in UTC as determined by your host OS & host hardware.
要查看某个特定地区的人们所使用的挂钟时间,请应用时区(ZoneId
)以获取ZonedDateTime
对象。
ZoneId z = ZoneId.of( "Africa/Tunis" ) ;
ZonedDateTime zdt = instant.atZone( z ) ;