Joda时间并根据数据透视表正确解析两位数年份

库珀

我有以下(略略)的代码将String输入解析为Joda TimeDateTime对象。我需要正确处理多种格式,包括四位数和两位数年份。

setupValidDateFormats();
DateTime date = convertToDateTime(thisField.getText());
if (date != null) {
    thisField.setText(date.toString("MM/dd/yyyy"));
} else {
    System.out.println("Invalid date");
}

private void setupValidDateFormats() {
    DateTimeParser[] formats = {
            DateTimeFormat.forPattern("MM/dd/yyyy").getParser(),
            DateTimeFormat.forPattern("MM/dd/yy").getParser(),
            DateTimeFormat.forPattern("MM-dd-yyyy").getParser(),
            DateTimeFormat.forPattern("MM-dd-yy").getParser(),
            DateTimeFormat.forPattern("MMddyyyy").getParser(),
            DateTimeFormat.forPattern("MMddyy").getParser()
    };
    formatter = new DateTimeFormatterBuilder().append(null, formats).appendTwoDigitYear(1950, true).toFormatter()
            .withLocale(Locale.US);
}

private DateTime convertToDateTime(String input) {
    if (isNullOrEmpty(input)) {
        return null;
    }

    DateTime date;
    try {
        // When you parse a date, it'll throw an exception for not only invalid formats,
        // but for invalid values such as 09/31/2013 or 02/30/2013. Leap year is included as well.
        date = formatter.parseDateTime(input);
    } catch (Exception e) {
        // User input a date in the incorrect format, or an invalid value.
        // Example: 02/30/2013 is invalid.
        date = null;
    }

    return date;
}

我遇到的问题是,当用户输入时120100,我希望它能够正确解析并最终在12/01/1900输出。但是,formatter.parseDateTime(input);inconvertToDateTime抛出一个IllegalArgumentException代替,该方法返回null

可能值得注意的是,如果我appendTwoDigitYearDateTimeFormatterBuilder链中删除,则输入会成功解析,但120100变为12/01/0000,但这不是我所需要的。

我是否误解了Joda Time API?不应该appendTwoDigitYear使用1950年的支点来处理00的两位数,即1900年吗?

Sotirios Delimanolis

当您使用像

DateTimeFormat.forPattern("MMddyyyy")

它可以读取类似的日期"120100"它的作用是读取12for MM01fordd00作为的字面值yyyy,即。所以0从一年开始00000

由于该模式之前,会出现MMddyy你的parsers阵列,它会被用来解析您的日期字符串。

您想要做的,以及重新排序或删除该格式,都是使用关键年份。

public static void main(String[] args) throws Exception {
    String str = "120100";

    DateTimeParser[] formats = {
            DateTimeFormat.forPattern("MM/dd/yyyy").getParser(),
            DateTimeFormat.forPattern("MM/dd/yy").getParser(),
            DateTimeFormat.forPattern("MM-dd-yyyy").getParser(),
            DateTimeFormat.forPattern("MM-dd-yy").getParser(),
            DateTimeFormat.forPattern("MMddyy").getParser()
    };

    DateTimeFormatter formatter = new DateTimeFormatterBuilder().append(null, formats).toFormatter()
            .withPivotYear(1950).withLocale(Locale.US);

    DateTime dateTime = formatter.parseDateTime(str);
    System.out.println(dateTime);       
}

版画

1900-12-01T00:00:00.000-05:00

我仍在尝试弄清楚其appendTwoDigitYear工作原理。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

SimpleDateFormat中的两位数年份

来自分类Dev

SimpleDateFormat中的两位数年份

来自分类Dev

如何更改Ruby on Rails解析两位数年份输入的方式

来自分类Dev

如何更改Ruby on Rails解析两位数年份输入的方式

来自分类Dev

Ruby错误地解析了两位数的年份

来自分类Dev

使用Regexextract从Google表格中的文本中提取日,月,两位数年份

来自分类Dev

为什么chron软件包从2030年开始奇怪地处理两位数年份?

来自分类Dev

用两位数的年份日期格式定义年份

来自分类Dev

解析两位数的日期

来自分类Dev

如何选择日期时间为ddMMyy,所以是两位数的年份?

来自分类Dev

PHP用两位数的年份转换日期

来自分类Dev

CalendarExtender具有两位数的年份

来自分类Dev

两位数的时差

来自分类Dev

正则表达式获取年份的后两位数字

来自分类Dev

使用dateutil.parser.parse将ValueError抛出两位数的年份日期

来自分类Dev

C#将当前年份转换为两位数

来自分类Dev

如何将年份为两位数的德语日期格式转换为 UTC 格式?

来自分类Dev

bash无法识别两位数

来自分类Dev

AngularJS orderyby两位数字

来自分类Dev

用两位数字索引

来自分类Dev

每两位数字交换

来自分类Dev

逗号后两位数

来自分类Dev

java:将代表两位数字年份的字符串转换为四位数

来自分类Dev

如果数字相等,大于两位数或小于两位数怎么写条件

来自分类Dev

根据另一列中的值的最后两位数字创建新列

来自分类Dev

在C中找不到Fnmatch的正确模式(不包括两位数字)

来自分类Dev

如何在Android中获得两位数的日期和时间?

来自分类Dev

日期时间 - 如何要求两位数的天数和月份数?

来自分类Dev

PostgreSQL:如何选择表中小数点后仅两位数字的值?

Related 相关文章

  1. 1

    SimpleDateFormat中的两位数年份

  2. 2

    SimpleDateFormat中的两位数年份

  3. 3

    如何更改Ruby on Rails解析两位数年份输入的方式

  4. 4

    如何更改Ruby on Rails解析两位数年份输入的方式

  5. 5

    Ruby错误地解析了两位数的年份

  6. 6

    使用Regexextract从Google表格中的文本中提取日,月,两位数年份

  7. 7

    为什么chron软件包从2030年开始奇怪地处理两位数年份?

  8. 8

    用两位数的年份日期格式定义年份

  9. 9

    解析两位数的日期

  10. 10

    如何选择日期时间为ddMMyy,所以是两位数的年份?

  11. 11

    PHP用两位数的年份转换日期

  12. 12

    CalendarExtender具有两位数的年份

  13. 13

    两位数的时差

  14. 14

    正则表达式获取年份的后两位数字

  15. 15

    使用dateutil.parser.parse将ValueError抛出两位数的年份日期

  16. 16

    C#将当前年份转换为两位数

  17. 17

    如何将年份为两位数的德语日期格式转换为 UTC 格式?

  18. 18

    bash无法识别两位数

  19. 19

    AngularJS orderyby两位数字

  20. 20

    用两位数字索引

  21. 21

    每两位数字交换

  22. 22

    逗号后两位数

  23. 23

    java:将代表两位数字年份的字符串转换为四位数

  24. 24

    如果数字相等,大于两位数或小于两位数怎么写条件

  25. 25

    根据另一列中的值的最后两位数字创建新列

  26. 26

    在C中找不到Fnmatch的正确模式(不包括两位数字)

  27. 27

    如何在Android中获得两位数的日期和时间?

  28. 28

    日期时间 - 如何要求两位数的天数和月份数?

  29. 29

    PostgreSQL:如何选择表中小数点后仅两位数字的值?

热门标签

归档