SimpleDateFormat解析日期字符串导致分钟数增加的问题

在java中经常使用SimpleDateFormat来解析日期字符串,我在使用过程中发现一个意外的现象,当SimpleDateFormat指定yyyy-MM-dd HH:mm:ss.SSS格式,解析2025-01-15 10:16:00.123123的时候,给出的时间是2025-01-15 10:18:03.123,这不是我预期的结果,预期的结果是2025-01-15 10:16:00.123。

这是怎么回事呢?打着研究透彻的想法,我看了下jdk的实现源码。SimpleDateFormat的内部实现是采用Calendar类来构造日期的,在SimpleDateFormat里有个成员是PATTERN_INDEX_TO_CALENDAR_FIELD,这个成员将SimpleDateFormat解析出来的年月日时分秒毫秒tag转为Calendar中对应的fieldNo,然后将日期字符串中的值一个个设置到Calendar里。

这里就是出问题的地方,SimpleDateFormat会将整个123123认为是毫秒设置进Calendar中,如此计算123123就是123秒123毫秒,这就导致分钟数增加了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值