新的java.sql.Date(0)与1970年1月1日00:00:00不对应

时间:2013-06-04 14:39:29

标签: java date timezone epoch

以下代码:

import java.sql.Date;
import java.text.DateFormat;
import java.text.SimpleDateFormat;

public class FooMain {
    private static final DateFormat DF = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm'Z'");

    public static void main(String args[]) {
        System.out.println(DF.format(new Date(0)));
    }
}

打印出来:

1970-01-01T01:00Z

不应该是1970-01-01T00:00Z吗?我知道Unix Epoch时间总是毫不含糊,我们不必担心时区,但这是我的时区,以防万一:

$ cat /etc/timezone 
Europe/Madrid    

2 个答案:

答案 0 :(得分:7)

new Date(0) 对应January 1, 1970, 00:00:00 GMT。问题是,默认情况下,DateFormat会在系统时区中打印日期。将格式化程序的时区设置为GMT:

DF.setTimeZone(TimeZone.getTimeZone("GMT"));
System.out.println(DF.format(new Date(0))); // outputs: 1970-01-01T00:00Z

答案 1 :(得分:1)

您必须.setTimeZone() SimpleDateFormat;默认情况下,时区是系统时区:

final SimpleDateFormat fmt 
    = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm'Z'");
fmt.setTimeZone(TimeZone.getTimeZone("GMT"));

System.out.println(fmt.format(new Date(0)));
相关问题