new java.sql.Date(0) not corresponding to 00:00:00 1 January 1970

梦想的初衷 提交于 2019-12-10 19:29:50

问题


The code below:

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)));
    }
}

prints out:

1970-01-01T01:00Z

Should'nt it have been 1970-01-01T00:00Z instead? I understand that Unix Epoch time is always unambiguous and we don't have to worry about timezones, but here's my timezone in case it matters:

$ cat /etc/timezone 
Europe/Madrid    

回答1:


new Date(0) does correspond to January 1, 1970, 00:00:00 GMT. The issue is that, by default, DateFormat will print the date in your system timezone. Set the timezone on your formatter to GMT:

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



回答2:


You have to .setTimeZone() your SimpleDateFormat; by default, the time zone is the system time zone:

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)));


来源:https://stackoverflow.com/questions/16920671/new-java-sql-date0-not-corresponding-to-000000-1-january-1970

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!