java - JodaTime:解析带有前导连字符的日期

标签 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,“-”不是数字

最佳答案

Joda 支持零之前的年份(请参阅 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解析日期

关于java - JodaTime:解析带有前导连字符的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13809682/

相关文章:

Java正则表达式找出匹配单词的个数

java - 首选项 XML 中不允许使用该元素?

java - 使用 Joda DateTimeFormatter.withLocale() 仅影响 am/pm 的字符串值,而不影响时间格式

java - 用于处理 DateTime 的 CustomJacksonMapper 配置在 Spring 4.1.5 上不起作用

java - 如何使用joda time在java中将字符串转换为日期时间

android - java.lang.NoClassDefFoundError : org. 乔达.time.DateTime

java - 在 Sling 模型中用冒号注入(inject) JCR 属性

java - RHEL jdk-8u20-linux-x64.tar.gz 1.8 表现得像 32 位

java - tfs 中的结账问题

java - 包 org.joda.time 不存在