0

我正在尝试根据当地时区调整 epoc 时间(即 GMT-7,但它显示 GMT)。我很确定这应该有效,但它不是......

Calendar localTime = new GregorianCalendar(TimeZone.getDefault());
Date dd = localTime.getTime();
long t = dd.getTime()/1000; 
System.out.printf("%d\n",t);

但它仍然输出基于 GMT 的 epoc 时间,而不是 GMT-7(我的时区)。在玩了一段时间后,我确实让这个工作......

Date ddd = new Date();
long t = ddd.getTime() + TimeZone.getDefault().getOffset( ddd.getTime() );
t = t/1000;

但是为什么第一个块不起作用?

4

1 回答 1

0

一个Date对象简单地将UTC时间包装为自纪元以来的毫秒数。这就是所有时间在 Java 中“隐藏”的方式。这也使其与工作保持一致。每当您想打印某些内容时,请对其应用 TimeZone 偏移量和 DST 偏移量。

这就是SimpleDateFormat类接受 TimeZone 但类上没有 TimeZone 设置器的原因Date

必修课:我听说Joda Time是一个更容易使用的 datetime API。

另外,请查看有关 Java 中标准日期和时间库的这篇文章。

于 2011-09-20T09:18:56.217 回答