我的问题很简单:
如果我这样做:
public class Main {
public static void main(String[] args) throws Exception {
Date d = new Date(0L );
System.out.println(d);
}
}
Run Code Online (Sandbox Code Playgroud)
我得到以下输出:Thu Jan 01 01:00:00 CET 1970
根据文件,我期待:1970年1月1日00:00:00 CET 1970年
我想错了......
编辑:的确,我读得太快了.我应该在1970年1月1日00:00:00 GMT
那么,我如何强制使用GMT,并忽略所有当地时间?
编辑,解决方案:
public static void main(String[] args) throws Exception {
SimpleDateFormat sdf = new SimpleDateFormat("H:m:s:S");
SimpleTimeZone tz = new SimpleTimeZone(0,"ID");
sdf.setTimeZone(tz) ;
Date d = new Date(0L );
System.out.println( sdf.format(d));
}
Run Code Online (Sandbox Code Playgroud)
该大纪元定义为00:00:00 1970-1-1上UTC.由于CET 是UTC + 1,它等于你的时间凌晨1点.
如果你看一下Date(long)构造函数,你会发现它希望这个值是自纪元UTC以来的毫秒数:
分配Date对象并将其初始化以表示自标准基准时间(称为"epoch")以来的指定毫秒数,即1970年1月1日00:00:00 GMT.
关于你强迫GMT而不是当地时区的愿望:简而言之,Date实例总是使用GMT.如果你只想格式化输出String,那么它使用GMT就有一个DateFormat类,特别是它的setTimeZone()方法.
| 归档时间: |
|
| 查看次数: |
3430 次 |
| 最近记录: |