2014-12-02 49 views
0

好吧,我已經使用了一些在stackoverflow上的帖子來獲得一些轉換半工作的一些XML數據。格林尼治標準時間上午12點轉換錯誤

在XML數據饋送中,我得到日期和時間,作爲SEPARATE元素 - 它們在GMT時間。

因此,爲了將其轉換並比較本地時間,我做了以下(「NE」包含XML飼料我的對象):

SimpleDateFormat sdf = new SimpleDateFormat("MM-dd-yyyy HH:mm"); 
sdf.setTimeZone(TimeZone.getTimeZone(myTimeZone.getDisplayName())); 

Date newdate = sdf.parse(ne.getNewsDate().toString() + " " + ne.getNewsTime().toString()); 

if (newdate.before(new Date())) 
    //don't use 
else 
    //use 

因此,作爲一個日期/時間的一個例子從XML飼料被錯誤地轉換,讓我們:

<date> 
<![CDATA[ 12-02-2014 ]]> 
</date> 
<time> 
<![CDATA[ 12:00am ]]> 
</time> 

「newdate」上面正在恢復「星期二12月2 23:00:00東部時間2014」的時候,我的系統時鐘讀2014年2月12日3:00 PM 「 很明顯,它將格林尼治標準時間12-02-2014 12:00轉換成錯誤的時間作爲未來的時間重新,而我需要它意識到這是過去。

所以,我很困惑的是,它正確地轉換爲來自Feed的日期/時間的大部分,但上面的某些不正確。

我希望這是有道理的,所以基本上我試圖通過將兩個SEPARATE日期/時間字段轉換爲本地時間來忽略來自XML饋送的日期/時間,然後檢查是否過去或不。

回答

1

HH is the date format for 24-hour dates,並且您未在日期格式字符串中傳遞am/pm標記佔位符。試試這個:

SimpleDateFormat sdf = new SimpleDateFormat("MM-dd-yyyy hh:mma"); 

N.B.SimpleDateFormat可能無法識別小寫("am")作爲"AM"的AM/PM標記,所以你可能需要打電話String#toUpperCase()

Date newdate = sdf.parse(ne.getNewsDate().toString() + " " + ne.getNewsTime().toString().toUpperCase()); 
+0

的人,我很喜歡這個網站!答案是現貨,及時! Thx - 我不需要toUpperCase,只需要hh:mma完美! – makapaka 2014-12-02 04:38:18

相關問題