为什么YAML解析的时间戳不正确?

时间:2014-02-20 08:33:09

标签: java date locale yaml

Yaml文件:

!!test.User
timestamp: 2012-11-22T01:02:03.567Z

Java类:

package test;

public class User {
    public Date timestamp;
}

snakeyaml解析它:

String str = "2012-11-22T01:02:03.567Z";

// parse it manually
Date date = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").parse(str);
System.out.println("manually: " + date);

// parse it by snakeyaml
Yaml yaml = new Yaml();
yaml.setBeanAccess(BeanAccess.FIELD);
InputStream input = new FileInputStream("C:\\test.yaml");
User myUser = yaml.loadAs(input, User.class);
System.out.println("by Yaml: " + user.timestamp);

打印:

manually: Thu Nov 22 01:02:03 CST 2012
by Yaml: Thu Nov 22 09:02:03 CST 2012

你可以看到它们是不同的。为什么呢?

1 个答案:

答案 0 :(得分:3)

您的手动方法获取当前时区的时间,但实际上以UTC表示(由Z时区指示)。实际上,Yaml解析的值似乎是正确的。

我对实际价值感到困惑,但CST(美国中部标准时间)应该比UTC晚6小时,但是你提前8小时。