猿问

如何在可选的 DateTime-Pattern 中设置前导零

我有一个用户输入字段,想解析他的日期,无论他输入什么。

用户可能会提供他的日期前导零或不带前导零,所以我希望能够解析这样的输入

02.05.2019

还有这个

2.5.2019

但据我所知,没有办法让前导零成为可选的,要么总是有 2 位数字,如 01、03、12 等,要么只有必要的数字,如 1、3、12。

所以显然我必须决定是否允许前导零,但是真的没有办法让前导零可选吗?


好吧,我测试了一个包含前导零 dd.MM.uuuu 的模式,并测试了一个不包含前导零 dMuuuu 的模式,当我用错误的模式解析错误的输入时,抛出了异常。

因此我的问题是是否有办法让前导零成为可选的。


手掌心
浏览 126回答 3
3回答

素胚勾勒不出你

当您知道时,这是微不足道的。一个模式字母,例如dor M,将接受一位或两位数字(或年份最多 9 位数字)。    DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("d.M.u");    System.out.println(LocalDate.parse("02.05.2019", dateFormatter));    System.out.println(LocalDate.parse("3.5.2019", dateFormatter));    System.out.println(LocalDate.parse("4.05.2019", dateFormatter));    System.out.println(LocalDate.parse("06.5.2019", dateFormatter));    System.out.println(LocalDate.parse("15.12.2019", dateFormatter));输出:2019-05-022019-05-032019-05-042019-05-062019-12-15我在文档中搜索了这些信息,但没有轻易找到。我不认为它有据可查。

jeck猫

您可以使用这样的自定义格式创建 DateTimeFormatterDateTimeFormatter.ofPattern("d.M.yyyy")然后,如果日期和月份提供 1 位或 2 位数字,则您可以解析日期。String input = "02.5.2019";LocalDate date = LocalDate.parse(input, DateTimeFormatter.ofPattern("d.M.yyyy"));我在这里使用了新的 java.time 包中的 LocalDate,所以我假设您的 Java 版本是最新的。

幕布斯6054654

您建议的日期格式应该有效——就像这个测试一样:@Testpublic void test() throws ParseException {    SimpleDateFormat f = new SimpleDateFormat("d.M.yyyy");    f.parse("7.8.2019");    f.parse("07.08.2019");    f.parse("007.008.002019");}相比之下,DateTimeFormatter 不接受年份的前导零,但日和月的前导零不是问题:@Testpublic void test2() throws ParseException {    DateTimeFormatterBuilder builder = new DateTimeFormatterBuilder();    DateTimeFormatter f = builder.appendPattern("d.M.yyyy").toFormatter();    f.parse("7.8.2019");    f.parse("07.08.2019");    f.parse("007.008.2019");}
随时随地看视频慕课网APP

相关分类

Java
我要回答