Is java.util.Date using TimeZone?
我有2台不同的计算机,每台计算机都有不同的TimeZone。
在一台计算机上打印
第二个打印(虽然键入硬编码)导致两台计算机中的打印不同。
这是为什么?
一些迂腐细节怎么样?
java.util.Date与时区无关。在javadoc说得对。
你想要一个特定时区的东西吗?这是java.util.Calendar。
棘手的部分?当你打印这些东西(使用java.text.DateFormat或子类)时,它涉及一个Calendar(涉及一个时区)。请参见DateFormat.setTimeZone()。
它肯定看起来(没有检查实现)像java.util.Date.toString()通过DateFormat。因此,即使是我们(大多数)与时区无关的类也会被时区弄乱。
想从我们纯粹的无区域Date对象中获取时区内容吗?有Date.toGMTString()。或者您可以创建自己的SimpleDateFormatter并使用setTimeZone()来控制自己使用的区域。
why is that?
因为像"2009年10月4日,14:20"这样的东西在没有知道它所指的时区的情况下毫无意义 - 你现在很可能会看到它,因为这是我写这篇文章的时间,它可能与你的时间相差几个小时即使它是在同一时刻。
计算机时间戳通常以UTC(基本上是英格兰格林威治的时区)来衡量,并且在将它们格式化为人类可读的东西时必须考虑时区。
因为毫秒数是UTC时间1/1/1970之后的毫秒数。如果您然后转换为不同的时区,则渲染时间将不同。
例如123456可以对应于格林威治中午(UTC)。但那在纽约将是一个不同的时期。
要确认这一点,请将SimpleDateFormat与时区输出一起使用,和/或更改第二台计算机上的时区以匹配第一台计算机。
javadoc解释得很好,
System.currentTimeMillis的()
请注意,虽然返回值的时间单位是毫秒,但值的粒度取决于底层操作系统,并且可能更大。例如,许多操作系统以几十毫秒为单位测量时间。
请参阅https://docs.oracle.com/javase/7/docs/api/java/util/Date.html#toString()。
是的,它正在使用时区。它也应该打印出来(一年前的三个字符)。