打印毫秒的Java纪元返回18000000?

时间:2013-01-25 06:05:00

标签: java datetime jodatime

在Joda,如果我打印

DateTime(GregorianChronology.getInstance())
    .withYear(1970)
    .withMonthOfYear(1)
    .withDayOfMonth(1)
    .withHourOfDay(0)
    .withMinuteOfHour(0)
    .withSecondOfMinute(0)
    .withMillisOfSecond(0).getMillis();

我看到18000000(这也恰好是MILLIS_PER_DAY的1/4,FWIW)。

我不明白的是,如果毫秒表示距离定义为Jan-1970-01-01的纪元的偏移量,那么毫秒不应该是0?

3 个答案:

答案 0 :(得分:2)

这个时代是1970年1月1日至1月1日 GMT 。您拥有的实例显然有不同的DateTimeZone。事实上它看起来像你在GMT + 5。 (18000000毫秒= 5小时)

答案 1 :(得分:1)

我认为这个问题与Java日期包含时区作为计算的一部分的方式有关。

对我来说,这意味着我比竞争对手提前了10个小时。

尝试创建设置为0 GMT的日期/时间值。

答案 2 :(得分:1)

“时代”是一个特定的,通用的瞬间,是宇宙时间中的一个点(比如说,阿波罗XI登陆月球的那一刻)。这个参考点可以在不同的国家以不同的方式表示(火星人也可以用自己的日历表示它)。例如,对于英格兰人(格林威治标准时间)来说,那时他们的时钟指针标记为“00:00:00”,而他们的(格里高利)日历标记为“1/1/1970”;但这只是一个例子。

该行

DateTime(GregorianChronology.getInstance()).withYear(1970).withMonthOfYear(1)
    .withDayOfMonth(1).withHourOfDay(0).withMinuteOfHour(0)
    .withSecondOfMinute(0).withMillisOfSecond(0)

为您提供您的国家/地区的时钟和日历标记为“00:00:00 1970-01-01”的时刻。总的来说,这是一个不同的瞬间。