2016-12-09 116 views
0

我得到的時間戳在流中的字符串改變時,他們是我想要的字符串的java.sql.Timestamp轉換格式"2016-12-08 05:44:48 <timezone like IST, UTC>""2016-12-08 05:44:48 <timezone like +0000>"SimpleDateFormat的解析是根據時區

,所以我寫了一個函數如下

private static Timestamp convertToTimestamp(String s) throws ParseException{ 
    String dateFormat = new String("yyyy-MM-dd hh:mm:ss z"); 
    SimpleDateFormat sdf = new SimpleDateFormat(dateFormat); 
    Date d = sdf.parse(s); 
    return new Timestamp(d.getTime()); 
} 

當運行

Timestamp t = convertToTimestamp("2016-12-08 05:44:48 UTC"); 
System.out.println(t); 

輸出是2016-12-08 11:14:48.0

它會自動轉換爲IST(也許我的JVM默認)。 如何進行更改以使輸出時間不會更改爲IST並與輸入相同?

回答

1

Java的java.util.Datejava.sql.Timestamp不存儲時區時忽略的時區。

他們總是跟蹤時間在UTC

解析包含時區的日期字符串時,該字符串將從給定的時區正確解析並調整爲UTC。

解析不帶時區的日期字符串時,該字符串將在JVM的默認時區中解析並轉換爲UTC,除非另一個時區已明確給出日期解析器(通常爲SimpleDateFormat)。

顯示(又名格式化)Date/Timestamp,它會在JVM的默認時區中所示,被除非另有規定。

不能商店時區,這樣他們就可以不記得原來的時區是在Date/Timestamp對象。

如果需要,請使用Java 8的ZonedDateTime

1

您解析日期

new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");