首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有可选的2-4年组件的Java 8日期时间解析

带有可选的2-4年组件的Java 8日期时间解析
EN

Stack Overflow用户
提问于 2018-11-21 21:18:24
回答 1查看 818关注 0票数 0

我想从各种日期字符串解析LocalDate对象。所有字符串的格式都是dd或。在第一种情况下,基准年应为19个而不是20个。

我有这个密码,但我不能让它起作用。我做错了什么?

代码语言:javascript
复制
        public static LocalDate parseDateString(String date) {
            DateTimeFormatter optionalFullYearParser = java.time.format.DateTimeFormatter.ofPattern("[dd-MM-yy][dd-MM-yyyy]");
            DateTimeFormatter parser = new DateTimeFormatterBuilder()
                    .appendOptional(optionalFullYearParser)
                    .appendValueReduced(ChronoField.YEAR, 2, 4, 1900)
                    .toFormatter(new Locale ("nl","NL"));

            return java.time.LocalDate.parse(date,parser);
        }

        System.out.println(parseDateString("11-10-56").toString());
        System.out.println(parseDateString("11-10-1956").toString());
        System.out.println(parseDateString("08-05-51").toString());

当我运行此代码时,它会抛出一个异常:

java.time.format.DateTimeParseException:文本'11-10-56‘不能在索引8处被解析.

任何帮助都将不胜感激!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-21 21:32:15

不需要2个格式化对象就可以做到这一点,当您使用appendValueReduced添加年份部分时,不应该在模式文本中包括年份部分。

代码语言:javascript
复制
public static LocalDate parseDateString(String date) {
    DateTimeFormatter parser = new DateTimeFormatterBuilder()
            .appendPattern("dd-MM-")
            .appendValueReduced(ChronoField.YEAR, 2, 4, 1900)
            .toFormatter(Locale.forLanguageTag("nl-NL"));
    return java.time.LocalDate.parse(date, parser);
}

测试

代码语言:javascript
复制
System.out.println(parseDateString("11-10-56").toString());
System.out.println(parseDateString("11-10-1956").toString());
System.out.println(parseDateString("08-05-51").toString());

输出

代码语言:javascript
复制
1956-10-11
1956-10-11
1951-05-08
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53420600

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档