2014-09-25 116 views
0

我是java程序設計的初學者。解析複雜的日期格式

我想分析複雜的日期格式:YYYY-MM-DDthh:mm:ssTZD,例如2014-09-24T21:32:39-04:00

我嘗試這樣:

String str_date="2014-09-24T21:32:39-04:00"; 
DateFormat formatter = new SimpleDateFormat("YYYY-MM-DDthh:mm:ss"); 
Date date = (Date)formatter.parse(str_date); 

但對於時區部分(-04:00),我不知道該用什麼(after the :ss)

任何幫助?

回答

2

Java < 7那麼你需要從您的輸入刪除':',並對其進行分析:

下面是一個例子:

public static void main(String[] args) throws ParseException { 
     String str_date="2014-09-24T21:32:39-04:00"; 
     str_date = str_date.replaceAll(":(\\d\\d)$", "$1"); 
     System.out.println("Input modified according to Java 6: "+str_date); 
     DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ"); 
     Date date = (Date)formatter.parse(str_date); 
     System.out.println(date); 
    } 

打印:

Input modified according to Java 6: 2014-09-24T21:32:39-0400 
Wed Sep 24 21:32:39 EDT 2014 
2

Java7

SimpleDateFormat文檔列出的時區爲zZX可讓你看起來像你想XXX

的Java6

Java7加入X說明符,但6仍具有Zz。但是,你必須先修改字符串,以便它或者沒有冒號在時區或具有GMT-

String str_date="2014-09-24T21:32:39-04:00"; 
int index = str_date.lastIndexOf('-'); 

str_date = str_date.substring(0, index) + "GMT" + str_date.substring(index+1); 

然後你如果要使用可以使用格式說明z

+0

我得到了一個異常與此消息「非法字符模式‘X’」! – user 2014-09-25 14:23:14

+0

@user您正在使用舊版本的Java。 – 2014-09-25 14:25:48

+0

是的,我使用Java 6,任何替代? – user 2014-09-25 14:26:37

0

ISO 8601

你的字符串與ISO 8601標準。該標準是由兩個優良日期時庫用作分析和生成字符串的缺省:

  • Joda-Time
  • java.time包(捆綁與Java 8,啓發約達時間,定義由JSR 310 )

只是將您的字符串傳遞給構造函數或工廠方法。內置的格式化程序會自動用於解析字符串。

與java.util.Date不同,在這兩個庫中,日期 - 時間對象知道它自己分配的時區。自UTC時間1970年初Unix時期開始,字符串末尾指定的UTC偏移量用於計算毫秒數(或java.time中的納秒數)。計算完成後,所得到的日期時間將被分配一個您選擇的時區。在這個例子中,我隨意分配一個印度時區。爲了清楚起見,本示例使用UTC創建第二個日期 - 時間對象。

喬達時間

DateTimeZone timeZoneIndia = DateTimeZone.forID("Asia/Kolkata"); 
DateTime dateTimeIndia = new DateTime("2014-09-24T21:32:39-04:00" , timeZoneIndia); 
DateTime dateTimeUtc = dateTimeIndia.withZone(DateTimeZone.UTC);