java - 新的 java.sql.Date(0) 不对应于 00 :00:00 1 January 1970

标签 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 纪元时间总是明确的,我们不必担心时区,但这是我的时区以防万一:

$ cat /etc/timezone 
Europe/Madrid    

最佳答案

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

关于java - 新的 java.sql.Date(0) 不对应于 00 :00:00 1 January 1970,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16920671/

相关文章:

django - 在 Django 模板中显示时间戳

MySQL UTC 到本地时区

javascript - Javascript date toLocaleString 是否考虑 DST?

java - 为什么只有当我有内部类时才会出现 "non-static variable this cannot be referenced from a static context"错误?

java - 在 jax-rs Resteasy 拦截器中检索客户端 IP 地址

java - 如何在oracle11g中使用dbUtils获取CLOB列?

java - 将字符串解析为本地日期不使用所需的世纪

java - dwr(Direct Web Remoting)检查项目中的版本号

javascript - 无法使用 javascript 中的 Date() 方法获得预期结果

flutter - 想在 flutter 中初始化 TimeZone 包,代码给出了这个错误