sdf ("yyyy-MM-dd HH:mm:ss") 与 ("yyyy-MM-dd hh:mm:ss")的区别
问题起源
由于发现线上展示时间与实际时间差了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");
即可
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?