解析“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”
初始 之后 添加之后
String parse() 年份前缀
“1/1/01”->“1/1/0001”->“1/1/2001
“1/1/96”->“1/1/0096”->“1/1/1996".
这对我来说很好,除了“2000”的问题:字符串“1/1/00”给出的年份是“0001”而不是“0000”。如何检测年份是“00”而不是“01”?谢谢!
https://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html
的文档中对此进行了解释
为了使用缩写年份模式("y" 或 "yy")进行解析,SimpleDateFormat 必须解释相对于某个世纪的缩写年份。它通过将日期调整为在创建 SimpleDateFormat 实例之前 80 年和之后 20 年内来实现。例如,使用 "MM/dd/yy" 模式和创建于 1997 年 1 月 1 日的 SimpleDateFormat 实例,字符串“01/11/12”将被解释为 2012 年 1 月 11 日,而字符串“05/04/64”将被解释为 1964 年 5 月 4 日。在解析期间,只有由 Character.isDigit(char) 定义的正好由两位数字组成的字符串将被解析为默认世纪。任何其他数字字符串,如一位数字字符串、三位或更多数字字符串,或不是所有数字的两位数字字符串(例如,“-1”),都按字面解释。因此,“01/02/3”或“01/02/003”使用与 Jan 2, 3 AD 相同的模式进行解析。同样,“01/02/-3”被解析为 Jan 2, 4 BC。
要解决“00”年份的问题,可以使用严格的解析模式 (format.setLenient(false)
)。在这种情况下,解析器将不允许输入“00”值并将导致异常。因此,对于“2000”年,用户将被迫输入四位数字,而不会得到令人困惑的“01”年。希望对大家有所帮助。
我必须以允许“yyyy”和“yy”和java支持的格式解析日期字符串这个案例。我只需要在调用 SimpleDateFormat.parse():
之后在年份中添加“20”或“19”初始 之后 添加之后
String parse() 年份前缀
“1/1/01”->“1/1/0001”->“1/1/2001
“1/1/96”->“1/1/0096”->“1/1/1996".
这对我来说很好,除了“2000”的问题:字符串“1/1/00”给出的年份是“0001”而不是“0000”。如何检测年份是“00”而不是“01”?谢谢!
https://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html
的文档中对此进行了解释为了使用缩写年份模式("y" 或 "yy")进行解析,SimpleDateFormat 必须解释相对于某个世纪的缩写年份。它通过将日期调整为在创建 SimpleDateFormat 实例之前 80 年和之后 20 年内来实现。例如,使用 "MM/dd/yy" 模式和创建于 1997 年 1 月 1 日的 SimpleDateFormat 实例,字符串“01/11/12”将被解释为 2012 年 1 月 11 日,而字符串“05/04/64”将被解释为 1964 年 5 月 4 日。在解析期间,只有由 Character.isDigit(char) 定义的正好由两位数字组成的字符串将被解析为默认世纪。任何其他数字字符串,如一位数字字符串、三位或更多数字字符串,或不是所有数字的两位数字字符串(例如,“-1”),都按字面解释。因此,“01/02/3”或“01/02/003”使用与 Jan 2, 3 AD 相同的模式进行解析。同样,“01/02/-3”被解析为 Jan 2, 4 BC。
要解决“00”年份的问题,可以使用严格的解析模式 (format.setLenient(false)
)。在这种情况下,解析器将不允许输入“00”值并将导致异常。因此,对于“2000”年,用户将被迫输入四位数字,而不会得到令人困惑的“01”年。希望对大家有所帮助。