我正在做簡單的字符串日期轉換在Java中,只有一件事我不得不小心轉換應在格林威治標準時間。 我能夠在GMT格式轉換我的字符串。但是,當我試圖將該日期轉換爲時間戳時,我得到了不同的值(似乎值取決於我的本地時區)。Java日期時間戳轉換問題
public static void timeFun(String str) throws ParseException {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
String dateInString = "2015-07-10T09:54:31.000-04:00";
Date date = formatter.parse(dateInString);
SimpleDateFormat sdfAmerica = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
TimeZone tz = TimeZone.getTimeZone("GMT");
sdfAmerica.setTimeZone(tz);
String convertedDate = sdfAmerica.format(date); // Convert to String
// first
Date dateInGMT = sdfAmerica.parse(convertedDate);
System.out.println(convertedDate); // Output = 2015-07-10T13:54:31.000Z (Right)
Timestamp timestamp = new java.sql.Timestamp(dateInGMT.getTime());
System.out.println(timestamp); // Output = 2015-07-10 19:24:31.0 (Wrong)
}
日期和時間戳類沒有時區 - 他們只表示,因爲時代的一些米利斯的。他們的toString方法可能會根據您的機器設置進行一些轉換,但不會影響對象的內部狀態。如果您使用Timestamp,則可能需要與數據庫進行交互,並且結果應該如您所期望的那樣(13:54GMT或某個等效時間),如果您的數據庫列有時區。 – assylias