为什么Java的SimpleDateFormat解析这个
您好,我使用自定义格式字符串设置了一个简单的日期格式: MMddyy
和我给它提供以下值来解析: 4 1 01
我认为它不应该解析这个,因为有空格,但简单日期格式返回日期
4 月 4 日 0001AD
有什么想法吗?
Hi I've got a simple date format set up with a custom format string:
MMddyy
and I give it the following value to parse:
4 1 01
I don't think it should parse this because of the spaces but the Simple Date Format is returning the date
April 4th 0001AD
any ideas why?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这是预期的行为 - 您告诉 DateFormat 对象需要一个日期的 6 个字符的字符串表示形式,这就是您传入的内容。空格被解析正常。但是,如果您使用“4x1x01”,则会出现错误。请注意,解析时,leniency 默认为 true,例如
,当 leniency 设置为 true(默认行为)时,解析会努力破译无效输入,例如,31 天的月份的第 35 天将成为下个月的第 4 天。
This is expected behaviour - you are telling the DateFormat object to expect a 6 character String representation of a date and that is what you passed in. Spaces are parsed OK. However, if you used "4x1x01" you would get an error. Note that when parsing, leniency defaults to true e.g.
When leniency is set to true (the default behaviour), the parse makes an effort to decipher invalid input e.g. the 35th day of a 31 day month becomes the 4th day of the next month.
对于解析,模式的大小(重复字符的数量)不是相应文本的预期大小。从 javadoc 中,对于不同的相关表示类型:
空格会导致解析器停止解析实际的字段(尾随空格对于数字无效)并从下一个字段开始。由于该模式在这两个字段之间没有空格,因此它不会被消耗,并且是第二个字段的一部分(前导空格有效)。因此得到的年份不是“恰好两位数”,并且不会被解析为默认世纪。
解析测试(
lenient
设置为false
):for parsing the size of a pattern (number of repeated characters) is not the expected size of the corresponding text. From the javadoc, for the different relevant presentation types:
The whitespace causes the parser to stop parsing the actual field (trailing spaces are not valid for numbers) and start with the next one. Since the pattern does not have a space between these two fields, it is not consumed and is part of the second field (leading spaces are valid). So the year got is not "exactly two digits" and will not be parsed into the default century.
Parsing tests (
lenient
set tofalse
):2 位数字年份不明确 - 因此假设 0001 - 以 01 结束的第一年。您可以转换为 4 位数字年份 - 也许使用字符串操作吗?
The 2 digit year is ambiguous - and it is therefore assuming 0001 - the first year that would have ended in 01. Can you convert to 4 digit years - maybe using String manipulation?