我正在尝试为本地时区(即GMT-7,但它显示GMT)调整epoc时间。我很确定这应该工作,但它不是…
Calendar localTime = new GregorianCalendar(TimeZone.getDefault());
Date dd = localTime.getTime();
long t = dd.getTime()/1000;
System.out.printf("%dn",t);
但是它仍然输出基于GMT的epoc时间,而不是GMT-7(我的时区)。玩了一段时间后,我确实得到了这个工作…
Date ddd = new Date();
long t = ddd.getTime() + TimeZone.getDefault().getOffset( ddd.getTime() );
t = t/1000;
但是为什么第一个块不工作呢?
一个Date
对象简单地包装了从epoch开始的以毫秒为单位的UTC时间。这就是Java中所有时间的"底层"表示方式。这也使它在工作中保持一致。当你想打印一些东西时,应用TimeZone偏移量和DST偏移量。
这就是为什么SimpleDateFormat
类接受TimeZone,而Date
类上没有TimeZone setter的原因。
必选:我听说Joda Time是一个更容易使用的datetime API。
还有,看看这篇关于Java标准日期和时间库的文章