Java,Java.util.date解析后的年份错误
因此,几天前,我在旧的、糟糕的Java,Java.util.date解析后的年份错误,java,scala,date,simpledateformat,java.util.date,Java,Scala,Date,Simpledateformat,Java.util.date,因此,几天前,我在旧的、糟糕的java.util.DateAPI中遇到了一个有趣的bug 在这个代码片段中,我们有3个不同的SimpleDataFormat,以及一些要分析的日期: val sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") val sdfPartname = new SimpleDateFormat("YYYY-MM-dd") val sdfShort = new SimpleDateFormat("yyMMddHHmm
java.util.Date
API中遇到了一个有趣的bug
在这个代码片段中,我们有3个不同的SimpleDataFormat
,以及一些要分析的日期:
val sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
val sdfPartname = new SimpleDateFormat("YYYY-MM-dd")
val sdfShort = new SimpleDateFormat("yyMMddHHmm")
sdfShort.setTimeZone(TimeZone.getTimeZone("UTC"))
val batchIdList = List(1912311300,1912301130,2001011300,1812311300,1612311300)
batchIdList.foreach( batchId => {
print("\nResult for input:" + batchId + "\n")
val date = sdfShort.parse(batchId.toString).getTime
print("dt: " + sdf.format(date) + "\n")
print("partname: " + sdfPartname.format(date) + "\n"))
})
输出非常有趣:
Result for input:1912311300
dt: 2019-12-31 14:00:00
partname: 2020-12-31
Result for input:1912301130
dt: 2019-12-30 12:30:00
partname: 2020-12-30
Result for input:2001011300
dt: 2020-01-01 14:00:00
partname: 2020-01-01
Result for input:1812311300
dt: 2018-12-31 14:00:00
partname: 2019-12-31
Result for input:1612311300
dt: 2016-12-31 14:00:00
partname: 2016-12-31
我不知道这错误的一年背后是什么。你有什么想法吗
PS:当然,更改为
ZonedDateTime
解决了这个问题,但我仍然想知道java.util.Date
为什么会这样工作。y
!=<代码>Y。检查模式注意yyyy
不是yyy
。大写Y=周年,即周所在的年份。这可能与实际年份不同,小写y。看,这回答了你的问题吗?当然,强烈反对使用SimpleDateFormat
和Date
类。支持使用java.time
包和DateTimeFormatter
类。至于这个bug本身,它看起来确实像一个bug,我的直觉是它永远不会被修复,但是我看到在你的面具中你使用了“y”和“y”,这两个词在技术上是不同的,尽管相似。尝试在所有格式中切换到“Y”或“Y”,看看它是否能解决您的问题problem@MichaelGantman仅适用于java 8+用户