繁体   English   中英

解析“1/1/00”为java中的“mm / dd / yy”格式提供1/1/0001。 如何解决?

[英]Parsing “1/1/00” gives 1/1/0001 for the “mm/dd/yy” format in java. How to workaround?

我必须以允许“ yyyy ”和“ yy ”的格式解析日期字符串,java支持这种情况。 在调用SimpleDateFormat.parse()之后,我只需要在年份中添加“20”或“19”:

添加后的初始后
字符串解析()年前缀
“1/1/01” - > “1/1/0001” - > “1/1/20 01”
“1/1/96” - > “1/1/0096” - > “1/1/19 96”。

这对我来说很好,除了“2000”的问题:字符串“1/1/00”给出“0001”年而不是“0000”。 如何检测年份是“00”,而不是“01”? 谢谢!

要解决“00”年的问题,可以使用严格解析模式( format.setLenient(false) )。 在这种情况下,解析器将不允许输入“00”值并将导致异常。 因此,对于“2000”年,用户将被迫输入四位数,并且不会得到令人困惑的“01”年。 希望它会帮助某人。

它在https://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html的文档中进行了解释。

对于使用缩写年份模式(“y”或“yy”)进行解析,SimpleDateFormat必须解释相对于某个世纪的缩写年份。 它通过将日期调整为创建SimpleDateFormat实例之前的80年和20年之后来实现此目的。 例如,使用1997年1月1日创建的“MM / dd / yy”模式和SimpleDateFormat实例,字符串“01/11/12”将被解释为2012年1月11日,而字符串“05/04 / 64“将被解释为1964年5月4日。在解析期间,只有由Character.isDigit(char)定义的正好两位数组成的字符串才会被解析为默认世纪。 字面上解释任何其他数字字符串,例如一位数字符串,三位或更多位数字符串,或不是所有数字的两位数字符串(例如,“ - 1”)。 所以使用相同的模式解析“01/02/3”或“01/02/003”,如公元1月2日。 同样,“01/02 / -3”被解析为公元前1月2日。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM