2011-12-13 97 views
2

變換字符串轉換日期我得到這個日期從SOAP消息的字符串使用日期格式

"2009-12-02T12:58:38.415+01:00" 

大多數我能我能識別和主題是

與此格式yyyy-MM-dd ? hh:mm:ss.????

玩變化

我試過不同的組合使用SSS T Z Z而不是'?「

DateFormat df = new SimpleDateFormat("... various formats ..."); 
System.out.println(df.parse("2009-12-02T12:58:38.415+01:00")); 

但沒有成功。

有什麼想法?

謝謝

回答

4

您必須更改時區的一部分。試試這個:

String a = "2009-12-02T12:58:38.415+01:00"; 
    a = a.replaceFirst(":(?=\\d+$)", ""); 
    final DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); 
    System.out.println(df.parse(a)); 
+0

謝謝,現在我試着理解正則表達式:) – Cris

+1

@Cris它只是刪除最後一個冒號 – Kent

+0

你有老鷹的眼睛去發現最後一個「:」:) – Cris

1

我不認爲這是可能的使用標準的Java日期格式。 使用joda-time這是可以做到使用下面的代碼:

DateTimeFormatterBuilder b = new DateTimeFormatterBuilder() 
      .appendYear(4, 4).appendLiteral('-').appendMonthOfYear(2).appendLiteral('-').appendDayOfMonth(2) 
      .appendLiteral('T') 
      .appendHourOfDay(2).appendLiteral(':').appendMinuteOfHour(2).appendLiteral(':').appendSecondOfMinute(2) 
      .appendLiteral('.').appendMillisOfSecond(3).appendTimeZoneOffset(null, true, 2, 2); 
    DateTimeFormatter dateTimeParser = b.toFormatter(); 
    System.out.println(dateTimeParser.parseDateTime("2009-12-02T12:58:38.415+01:00")); 
+0

不,它不是。看看時區的一部分。 – Kent

+0

嘗試在簡單的主....線程「主」的異常java.text.ParseException:Unparseable日期:「2009-12-02T12:58:38.415 + 01:00」 – Cris

+0

你是對的肯特,完全錯過了冒號... –

1

請嘗試以下操作。

String date = "2009-12-02T12:58:38.415+01:00"; 
     int lastIndexOf = date.lastIndexOf(":"); 
     if(lastIndexOf>=0){ 
     date = date.substring(0,lastIndexOf)+date.substring(lastIndexOf+1); 
     } 
     System.out.println("~~~~~~date~~~~~"+date); 
     SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss.SSSSZ"); 
     try { 
      sdf.parse(date); 
      System.out.println("....date..."+date); 
     } catch (ParseException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     }