问题起源
由于发现线上展示时间与实际时间差了12个小时,在查按数据库,发现数据库数据正确后,联想到了
SimpleDateFormat 格式化日期时可能会出现这样相差12个小时的错误。
问题分析
区别在于日期格式中的小时部分的表示方式。
-
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- "HH"表示使用24小时制,范围为00-23。例如,上午10点表示为"10",下午3点表示为"15"。
- 适用于使用24小时制表示小时的情况。
-
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
- "hh"表示使用12小时制,范围为01-12。例如,上午10点表示为"10",下午3点表示为"03"。
- 还需使用额外的小写字母"a"或"aa"来指定上午和下午。上午用"AM"表示,下午用"PM"表示。【默认上午】
- 适用于使用12小时制表示小时的情况。
解决方式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
替换为
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
即可