简单的日期格式年份格式问题

时间:2018-08-03 07:22:19

标签: java datetime java-8 simpledateformat

我在日期格式方面遇到问题。我正在使用SimpleDateFormat来解析日期,并使用MM / dd / yyyy格式来解析日期,它可以与正确的输入(如 2011/11/11 )一起正常工作,并返回正确的结果(11月11日,星期五) 00:00:00 IST 2011)

但是,如果我们输入 11/11/11 作为输入,则它不能正常工作( 11月11日星期三00:00:00 IST 11 ),也不会给出解析错误

getfirebaseData()

4 个答案:

答案 0 :(得分:3)

如果可以使用Java 8或更高版本,请使用DateTimeFormatterLocalDate类来解析日期值。如果输入的格式不正确,则会抛出错误。

DateTimeFormatter formatter1 = DateTimeFormatter.ofPattern("MM-dd-yyyy");
LocalDate date1 = LocalDate.parse("11-11-2011", formatter1);
System.out.println(date1);

以上将按预期工作,但是如果您尝试使用相同的格式化程序对象解析“ 11-11-11”,则会出现类似

的异常
Exception in thread "main" java.time.format.DateTimeParseException: Text '11-11-11' could not be parsed at index 6
at java.time.format.DateTimeFormatter.parseResolved0(Unknown Source)
at java.time.format.DateTimeFormatter.parse(Unknown Source)
at java.time.LocalDate.parse(Unknown Source)
at com.is.TestDate.main(TestDate.java:14)

答案 1 :(得分:2)

MM/dd/yy11/11/11使用11/11/2011

答案 2 :(得分:1)

如果要进行严格检查,则SimpleDateFormat是不可能的。您可以改为在日期字符串上进行模式检查:

if (!dt.matches("\\d{2}/\\d{2}/\\d{4}")) {
    //throw exception
}

答案 3 :(得分:1)

这不是不是问题。 malloc()的Java API是正确的。它说的是Year的模式:

  

对于解析,如果图案字母的数量大于2,则年份   不论数字位数如何,都将按字面意义进行解释。所以用   模式“ MM / dd / yyyy”,“ 01/11/12”解析为公元12年1月11日。

因此,在您提供有效输入时不会引发异常。

如果一年中必须使用两种不同的日期格式SimpleDateFormatyyyy将一个版本转换为另一个版本,或者使用两个格式化程序-如果您必须使用yy

从Java 8开始就是这样:How to parse/format dates with LocalDateTime? (Java 8)