我在日期格式方面遇到问题。我正在使用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()
答案 0 :(得分:3)
如果可以使用Java 8或更高版本,请使用DateTimeFormatter和LocalDate类来解析日期值。如果输入的格式不正确,则会抛出错误。
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/yy
和11/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日。
因此,在您提供有效输入时不会引发异常。
如果一年中必须使用两种不同的日期格式SimpleDateFormat
和yyyy
将一个版本转换为另一个版本,或者使用两个格式化程序-如果您必须使用yy
从Java 8开始就是这样:How to parse/format dates with LocalDateTime? (Java 8)