与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,其中“-”不是数字

最佳答案

乔达支持零年之前的岁月(参见DateTimeConstants.BC意味着在基督之前)。
因此,乔达(Joda)将-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

10-06 11:10