0

我有一个非常奇怪的问题。我写了以下代码:

public static final long ONE_DAY_IN_MS = 86400000L;

public static long getTimeOfTheDayInMs() {
    return System.currentTimeMillis() % ONE_DAY_IN_MS;
}

这应该返回自午夜以来的毫秒数,对吧?好吧,是也不是,因为它返回自午夜以来的时间减去一小时。这是为什么?为什么这个代码:

System.out.println(new Date(System.currentTimeMillis()));
System.out.println(new Date(getTimeOfTheDayInMs()));

返回这个??

18-jul-2013 12.34.03
1-jan-1970 11.34.03

我还发现这个问题似乎是从 1992 年 3 月 30 日开始出现的。

有没有人和我一样的问题?有人可以解释我为什么吗?

提前致谢,

PS:这个问题出现在我的 Windows PC 和我的 Android 平板电脑上。

4

3 回答 3

3

getTimeOfTheDayInMs()不会返回自午夜以来毫秒数。时代是 1970 年,currentTimeMillis()是相对的。使用Calendar http://developer.android.com/reference/java/util/Calendar.html获取第二个等字段。

于 2013-07-18T10:41:44.207 回答
1

当我运行你的代码时,我得到

Thu Jul 18 12:33:53 CEST 2013
Thu Jan 01 11:33:53 CET 1970

即不同之处在于夏令时(CEST 是中欧夏令时;CET 是中欧(冬季)时间,即 GMT + 1)。

于 2013-07-18T10:37:09.203 回答
0

由于时区变化、夏令时政策的变化等原因,可能会发生这种情况。我强烈建议您不要在生产代码中使用 Date 类。使用日历甚至更好的 Joda Time。

  DateMidnight midnight = new DateMidnight();
  DateTime now = new DateTime();
  Duration duration = new Duration(midnight, now);
  int seconds = duration.toStandardSeconds().getSeconds();
于 2013-07-18T10:41:47.177 回答