有没有办法强迫乔达时间来分析日期,只有当它们包含的四位年?例如:

  • 2009-11-11-应该分析
  • 09-11-11-不应该分析

尝试了下列代码:

DateTimeFormatterBuilder builder = new DateTimeFormatterBuilder();
DateTimeFormatter formatter = builder.appendYear(4, 4).appendLiteral('-').appendMonthOfYear(1).appendLiteral('-').appendDayOfMonth(1).toFormatter();
formatter.parseDateTime("09-11-11");

分析成0009-11-11.显然minDigits的方法appendYear仅用于格式的时候打印出来的日期。
结果是相同的,如果我使用appendYearOfEra().如果我使用appendYearOfCentury(),它分析的年成1909年,而不是。

我们正在执行一个一般数据分析器,其中将承认各种类型的投入。还的例子是缩短形式的真正的交易(为简单起见).现实生活情景分析的日期,它可有周一至周五个月的话,时间、区域和不同的角色分离的月份,日和年。因此,编写一RegEx或检查的内容/长串可以证明是相当困难。

一些实际的例子可以看起来是这样的:

  • 2009-11-11
  • 星期三2009-11年期-11T15:00:00
  • 2009/11/11 15:00
  • 更多...
有帮助吗?

解决方案

DateTimeFormatterBuilder.appendFixedDecimal()可能做你需要什么。

或者,可以实现的DateTimeParser界面,以创造什么parser你想要的和传递到DateTimeFormatterBuilder.

其他提示

你可以检查长的日期串。

你可以建立非常具体分析程序和格式化使用 DateTimeFormatterBuilder.有一般没有必要使用这类直接的,因为最常见的格式的更容易获得其他地区API,但这是生成器类,他们所使用的复盖。

什么你想得到一个用户进入'0001-01-01'的日期(即,他们进入了4位数字为一年,但第三个人都是零)?什么关于'0999-12-31'?和'999-12-31'?和什么有关'10000-01-01'-臭名昭着的 Y10K1 问题吗?

  • 如果这是一个合法的价值,然后你被卡住发现的长的什么样的用户输入作为今年的部分的日期(可能是之后的任何其他分析已经完成),并确保它至少(或者是它到底是什么?) 四位数字。

  • 如果这不是一个合法的价值,然后你被卡住检查的年份值之日后进行分析。

  • 或者你可以把代码和修改,以便它包括首选定的有效期一年。


1 我不计划开始工作,在固定的Y10K问题之前5000-01-02.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top