sdf ("yyyy-MM-dd HH:mm:ss") 与 ("yyyy-MM-dd hh:mm:ss")的区别

发布时间 2023-06-25 14:23:26作者: 已至谷底余生只留前进

问题起源 

  由于发现线上展示时间与实际时间差了12个小时,在查按数据库,发现数据库数据正确后,联想到了

SimpleDateFormat 格式化日期时可能会出现这样相差12个小时的错误。

 

问题分析

  区别在于日期格式中的小时部分的表示方式。

  1. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    • "HH"表示使用24小时制,范围为00-23。例如,上午10点表示为"10",下午3点表示为"15"。
    • 适用于使用24小时制表示小时的情况。
  2. 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");
  即可