2013-03-20 132 views
1

我有一個「壞」格式的日期&時間的字符串,我需要轉換爲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小時,這是正確的。

+2

答案任何Java日期問題是JodaTime:http://joda-time.sourceforge.net/ – Johan 2013-03-20 17:58:36

+0

你的例子產生了'expected'輸出。順便說一句,'Date.get/setYear'已被棄用了大約10年。 – 2013-03-20 18:00:23

+0

@Johan可能是這樣,但可能存在我無法使用JodaTime的原因,所以如果可能的話,我需要用標準Java API來解決它。 – kaderud 2013-03-20 18:07:07

回答

3

您的格式字符串中的Z表示時區正在從dateString動態設置,格式化程序本身的時區將被忽略parse()。由於dateString說日期爲

添加4位今年您的格式和dateString

+0

恐怕如果我從'sourceSDFformatter'中刪除'Z'並更新我的'dateString'並在replaceAll()方法中從其中刪除'PST',它並沒有什麼區別。 – kaderud 2013-03-20 18:05:22

+0

嘗試在您的格式和數據中預先輸入4位數的年份,以便解析它,而不是在事實之後進行設置。 – 2013-03-20 18:09:40

+0

這樣做!雖然我不確定我是如何喜歡我的解決方案的,但它似乎能夠工作,即使它有點難看:-)'String dateString =「Mar 20th,10:00 AM PST」.replaceAll(「st | nd | rd | th「,」「).replace(」PST「,」2013「);'所以我想答案是」總是「在試圖用SimpleDateFormat解析日期字符串時確保有一年,或者使用'JodaTime' :-) – kaderud 2013-03-20 18:15:52

相關問題