0

与乔达时间

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,'-' 不是数字

4

1 回答 1

3

Joda 支持零之前的几年(请参阅DateTimeConstants.BC这意味着在基督之前)。
乔达-012-10-25T10:03:22Z就像公元前 12 年一样对待

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  

如果你想抛出异常,那么你应该手动进行,因为 Joda 在这种情况下不会抛出异常。做类似的事情

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

或者使用SimpleDateFormat来解析Date

于 2012-12-10T21:49:02.883 回答