2013-04-02 55 views
0

我的Web服務在如何轉換/日期(-6847824600000 + 0530)/一個日期時間

"dateRequired": "/Date(1357101103000+0530)/", 
"etaExport": "/Date(-6847824600000+0530)/", 
"etaImport": "/Date(-6847824600000+0530)/", 

返回日期爲JSON。我想知道將這些unix日期轉換爲DD-MM-YYYY HH:MM格式並希望消除'/ Date'和'/'的最佳方法。什麼是最好的和有效的方式?

+0

但是做這些stribg值的含義。他們的相應日期是什麼? – Raedwald

回答

5

這些數字看起來像毫秒自大紀元後跟一個時區的指標,這是很奇怪,因爲通常如果你正在做,因爲大紀元毫秒(或秒),你表達的日期/時間世界標準時間。所以你必須做的第一件事就是查看Web服務的文檔,並找出它們的意思。

然後,它的使用正則表達式(或只是String#substring)提取數字,Long.parseLong把它們變成一個長期的,實例化一個Date對象(例如,new Date(longNumber)),以及處理任何時區的數學這是網絡的問題服務期待你做。最後一點,在JDK中,您需要一個Calendar,或者如果您希望更輕鬆一些,並且功能更強大,那麼很多人都會喜歡JodaTime

+0

我用WCF編寫的Web服務和um返回一個C#DatetTime對象。我認爲他們是毫秒。 – Kalanamith

+1

@Kalanamith:是的,那一部分很清楚。什麼是不明確的是時區的事情。同樣,通常Epoch值(任何一種)都是不變的,用UTC表示。也許我們的目標是說時間應該用+0530表示 - 例如,您的實際第一個值「1357101103000」是2013年1月2日04:31:43,但您應該將其顯示爲2013年1月2日10:01 :43 + 0530,或類似的東西。 –

+1

好吧,我沒有故意添加時區。它自動來。我在數據庫中的日期時間值看起來像這樣「'2012-10-31 20:48:47.287'」和閱讀和序列化。 – Kalanamith

1

嗨雖然上面的回答是正確的,但作爲替代這一點,你可以用下面的方法

第一提取使用下面的方法將JSON長日期時間。

 String JsonDate = jsonGroup.getString("Date"); 

     int idx1 = JsonDate.indexOf("("); 
     int idx2 = JsonDate.indexOf("+"); 

     if (idx1 > 0 && idx1 < idx2 && idx2 < JsonDate.length()) { 
      String s = JsonDate.substring(idx1 + 1, idx2); 
     } 

一旦你的日期,你可以將龍迄今

if (!s.equalsIgnoreCase("null")) { 
     Long date1 = Long.parseLong(s); 
     Date dt1 = new Date(date1); 

     holder.TxtPunchoutDate.setText(getDateCurrentTimeZone(dt1)); 
    } 

和設定的起始日期爲UTC然後將其轉換回當地時間如下

public static String getDateCurrentTimeZone(Date dt) { 
    try { 
     //Convert DATE to UTC DATETIME 
     SimpleDateFormat simpleDateFormat = new SimpleDateFormat(
       "MMM dd yyyy hh:mm:ss aa "); 
     simpleDateFormat.setTimeZone(TimeZone.getTimeZone("UTC")); 
     //simpleDateFormat.setTimeZone(TimeZone.getDefault()); 
     //Convert to LocalDATE from UTC 
     Date fromGmt = new Date(dt.getTime() + TimeZone.getDefault().getOffset(dt.getTime())); 

        return new SimpleDateFormat("MMM dd yyyy hh:mm:ss aa").format(fromGmt).toString(); 

    } catch (Exception e) { 
    } 
    return ""; 
} 

如前所述,這是一種替代方案,而不是一種正確的方法。雖然如果有人想重構這個,請大家都歡迎。

感謝