2014-02-20 124 views
1

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 

你可以看到他們是d ifferent。爲什麼?

回答

3

您的手動方法獲取當前時區的時間,但實際上以UTC表示(如Z時區所示)。所以實際上Yaml解析的值似乎是正確的。儘管如此,CST(美國中部標準時間)應該比UTC UTC時間晚6小時,但你可以提前8個小時。

+1

除非是中國標準時間。 –

+1

@MichałPolitowski好點,我討厭它時,不同的時區有相同的縮寫:-( – Henry

+1

這就是爲什麼一個人應該避免3個字母的時區代碼,而是使用[適當的時區名稱](https:// en。例如:「美國/芝加哥」或「亞洲/臺北」而不是「CST」。 –