2010-05-12 50 views
7

我有一個由Dojo轉換成RFC822格式的JS日期。函數調用 - dojo.date.toRfc3339(jsDate)生成以下日期 - 2007-02-26T20:15:00 + 02:00。RFC822用Java解析時區

我有一個應用程序使用Java日期SimpleDateFormat來解析上面生成的日期。由於時區的原因,我在解析此日期格式時遇到問題。我試圖使用

YYYY-MM-DD'T'hh:MM:SSZ

這失敗作爲時區的 'Z' 不指望一個 ':' 字符。有誰知道我將如何指定一個模式來處理RFC822日期與':'?

修訂:

感謝正確地解釋什麼,我試圖做:)我的意思是說,迄今爲止在RFC3339生成,我需要RFC822。看起來我將不得不重寫JavaScript。我希望我不必這樣做,並且可以指定日期格式模式,而不必修改任何Java代碼,因爲日期格式只是簡單地注入到應用程序的Spring bean中。

只是爲了完整性,是否有一種方法可以指定日期格式表達式來忽略序列中的字符(不進行字符串操作/替換)?在這種情況下,我會說忽略任何':'或者只是一起忽略時區?

回答

3

這工作

SimpleDateFormat format = new SimpleDateFormat("yyyy-mm-DD'T'hh:mm:ssZ"); 
format.parse("2007-02-26T20:15:00+02:00".replaceAll("([\\+\\-]\\d\\d):(\\d\\d)","$1$2")); 

(請注意我的「Z」格式說明服藥後最終冒號出來的格式。)

2

RFC822不允許冒號是在時間日期的區域部分。它只需要4位數字。該Dojo方法的名稱表示它正在使用RFC3339。看起來幾乎與ISO8601的格式相同。 Joda TimeISODateTimeFormat,如果你能使用那個庫,它就是ISO8601兼容。方法dateTimeNoMillis()看起來與Dojo格式匹配。它確實比標準的Java日期和時間API更好。否則,高咖啡因的建議將是一條路。

更新響應Jamen的更新

是不是有辦法有道場使用不包含的時區的格式?然後您可以調整Java端的格式以匹配。我對Dojo瞭解不多,而且我無法找到它提供的toRfc3339函數的任何文檔。

4
import java.text.SimpleDateFormat; 
import java.util.Date; 

public class DateUtil { 

    public static Date ParseRFC3339DateFormat(String p_date) 
    { 
     try{ 
      SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); 
      String dts = p_date.replaceAll("([\\+\\-]\\d\\d):(\\d\\d)","$1$2"); 
      return formatter.parse(dts); 
     }catch (Exception e) { 
       return null; 
     } 
    } 
} 
1

而不是使用dojo.date.toRfc3339(jsDate)您可以創建自己的函數與自定義格式字符串。

像下面的東西會刪除冒號,應該可以通過你的java格式進行解析。

function toRfc3339String(jsDate){ 
    return dojo.date.locale.format(jsDate,{selector: 'date', datePattern:'yyyy-MM-dd\'T\'hh:mm:ssZ'}); 
} 
0

你可以做到這一點一般沒有Java 7中我要求StackOverflow在這2個問題,2012年內,使有不需要任何第三方庫的解決方案。

只需檢查我的latest question的描述中提供的實現,該實現也指向前面討論這個問題的那個。