2012-12-10 35 views
0

解析日期隨着JodaTimeJodaTime:與領先的連字符

DateTimeFormatter dtf = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss'Z'").withZone(DateTimeZone.UTC); 
java.util.Date parsedDate = dtf.parseDateTime("-012-10-25T10:03:22Z").toDate(); 

System.out.println(parsedDate) 

打印

'Tue Oct 27 04:03:22 CST 13' 

正如你所知道的,當地的時區CST。

我希望拋出異常,因爲傳遞的日期不是預期的格式。或者可能是一個NumberFormatException,' - '不是一個數字

+0

問題是什麼? –

+0

我認爲它將'-012'作爲一個數字,當日的'.getYear()'是'-1887' – Esailija

+0

當你在'forPattern'方法中指定一個模式時,你必須提供一個格式爲'parseDateTime',它會給你一個有效的Date對象。 – knownasilya

回答

3

Joda支持零年之前(參見DateTimeConstants.BC這意味着在基督之前)。
所以-012-10-25T10:03:22Z被喬達對待,就像12年前的B.C.

DateTime d = dtf.parseDateTime("-012-10-25T10:03:22Z"); 
System.out.println(d.getEra()); // returns 0 -> that means B.C. era Before Christ 
System.out.println(d.getYear()); // returns -12 

如果你想拋出異常,那麼你應該這樣做manualy,becouse喬達不會在這種情況下拋出異常。不要像somethid

DateTime dateTimeParser(String dateAsString) 
    { 
     DateTime res = dtf.parseDateTime(dateAsString); 
     if (d.getYear() < 0) throw new IllegalArgumentException(); 
     return res; 
    } 

或者使用SimpleDateFormat解析Date