我有一個「壞」格式的日期&時間的字符串,我需要轉換爲Date
對象,所以我可以格式化它的使用SimpleDateFormat
和當前Locale
內容。轉換日期和時間與SimpleDateFormat的從一個時區到另一個時區的
但是,無論我如何嘗試,我都無法獲得輸出以顯示正確的時間,我將其從PST時間(UTC-8)轉換爲GMT,但打印時間過長1小時,GMT從(當前PDT)時區只有+7。
我試了兩個Android設備上的代碼,其中一個設置爲GMT,一個設置爲CET,一個Android模擬器,並從命令行運行,所有這些設備都會導致錯誤。 (+1)
我在下面的代碼中做錯了什麼?
String sourceSDFformatter = "MMM d, h:mm a Z";
String destSDFformatter = "EEEEE, MMMMM dd, HH:mm";
String dateString = "Mar 20th, 10:00 AM PST".replaceAll("st|nd|rd|th", "");
SimpleDateFormat sourceSDF = new SimpleDateFormat(sourceSDFformatter, Locale.US);
SimpleDateFormat destSDF = new SimpleDateFormat(destSDFformatter, Locale.UK);
TimeZone sourceTZ = TimeZone.getTimeZone("America/Los_Angeles");
TimeZone destTZ = TimeZone.getTimeZone("GMT");
sourceSDF.setTimeZone(sourceTZ);
destSDF.setTimeZone(destTZ);
Date myDate = sourceSDF.parse(dateString);
myDate.setYear(new Date().getYear());
System.out.println("Your Time: " + destSDF.format(myDate));
輸出:
Your Time: Wednesday, March 20, 18:00
當我預期輸出爲:Your Time: Wednesday, March 20, 17:00
。
我已經試過了Conversion of local time zone to GMT in java的SO回答,如果我更改TimeZone.getTimeZone("America/Los_Angeles")
,那麼它的工作原理是完美的,那麼打印的小時數是提前7小時,這是正確的。
答案任何Java日期問題是JodaTime:http://joda-time.sourceforge.net/ – Johan 2013-03-20 17:58:36
你的例子產生了'expected'輸出。順便說一句,'Date.get/setYear'已被棄用了大約10年。 – 2013-03-20 18:00:23
@Johan可能是這樣,但可能存在我無法使用JodaTime的原因,所以如果可能的話,我需要用標準Java API來解決它。 – kaderud 2013-03-20 18:07:07