【发布时间】:2012-12-08 15:29:18
【问题描述】:
我正在尝试使用 Java Date 类来格式化一些日期。我有一些通过以前的计算得到的长值。在我开始格式化任何日期之前,我有一个长列表,它们如下所示。
-12345
0
12345
我做了一些这样的基本格式...
DateFormat df = new SimpleDateFormat("dd/MMM/yyyy HH:mm:ss");
String formattedDate = df.format(new Date(dateNumber.longValue()));
因为 Java 使用 1970 年初作为基础,所以我的预期输出将类似于
31/Dec/1969 23:59:47
01/Jan/1970 00:00:00
01/Jan/1970 00:00:12
但是我实际得到的输出是
31/Dec/1969 18:59:47
31/Dec/1969 19:00:00
31/Dec/1969 19:00:12
我有点困惑,为什么他们都在 12 月 31 日,而不是在 12 月 31 日和 1 月 1 日之间分开。由于列表中的后两个数字是正数,我无法弄清楚为什么日期会在 1970 年之前成为任何东西。如果有人可以使用基本的 Java 库帮助我解决这个问题,我将不胜感激。
【问题讨论】:
-
问题一定出在你电脑的时区(在你的电脑上看起来像UTC -5)。更多信息:What is the default timezone in java.util.Date
-
@LuiggiMendoza,你怎么知道他电脑上的默认 TZ 是什么?
-
@foampile 检查 OP 代码的第二个测试:它将在 0 毫秒内创建一个新的
Date,打印它会给你31/Dec/1969 19:00:00。之后,获取 OP 的 pc 时区是基本的数学运算。 -
很好,@LuiggiMendoza