2014-03-07 88 views
0

調用OData service並得到一個dateATOM XML響應格式化給我的日期值作爲日期從響應

<d:BUSINESS_DATE m:type="Edm.DateTime">2012-08-02T00:00:00.0000000</d:BUSINESS_DATE>

不過。目前我有一個日期值,如"Thu Aug 02 2012 02:00:00 GMT+0200 (Mitteleuropäische Sommerzeit)"。我希望將此值轉換爲Edm.DateTIme格式,如上所示。

任何實現相同功能。任何workaroud。請幫忙。

回答

2

以下:

public static void main(String[] args) { 
    String fromDate = "Thu Aug 02 2012 02:00:00 GMT+0200 (Mitteleuropäische Sommerzeit)"; 
    String fromDateConverted = fromDate.replaceAll("\\+(..)(..)", "+$1:$2"); 
    System.out.println("ORG: " + fromDate); 
    System.out.println("CNV: " + fromDateConverted); 
    SimpleDateFormat parseFormat = new SimpleDateFormat("EE MMM dd yyyy HH:mm:ss zzzz", Locale.ENGLISH); 

    Date theDate = parseFormat.parse(fromDateConverted); 

    // OData Edm.DateTime: 
    // yyyy 「-」 mm 「-」 dd 「T」 hh 「:」 mm [":" ss["." fffffff]] 
    SimpleDateFormat outFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.0000000"); 

    System.out.println("EDM: " + outFormat.format(theDate)); 
} 

打印出:

ORG: Thu Aug 02 2012 02:00:00 GMT+0200 (Mitteleuropäische Sommerzeit) 
CNV: Thu Aug 02 2012 02:00:00 GMT+02:00 (Mitteleuropäische Sommerzeit) 
EDM: 2012-08-02T03:00:00.0000000 

注意的時區轉換。 Java SimpleDateFormat需要偏移量中的冒號。

說到時區,我不知道OData Atom XML是否指定了某個時區。 Edm.DataTime沒有這樣的功能。

編輯:如果你想輸出轉換到一個特定的時間段(我的默認TZ是GMT + 1,所以它打印03:00爲輸入02:00 GMT + 2),可以設置時區爲outFormat,例如:

outFormat.setTimeZone(TimeZone.getTimeZone("PST"));