JodaTime:使用前导连字符解析日期

时间:2012-12-10 21:37:48

标签: java jodatime

使用JodaTime

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

1 个答案:

答案 0 :(得分:3)

Joda在零之前支持多年(见DateTimeConstants.BC,这意味着在基督之前) 所以{J}对待-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