日期格式化跨年bug,是否与你不期而遇?

a 夏天 提交于 2020-01-04 00:27:30

 

public class DateFormatBug {

    public static void main(String[] args) throws ParseException {
        // 示例一
        printBugDate();
    }

    private static void printBugDate() throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");
        Date date = sdf.parse("2020-1-1 13:12:12");
        System.out.println(date);
        String dateStr = sdf.format(date);
        System.out.println(dateStr);
    }
}

打印日志为:

Sun Dec 29 13:12:12 CST 2019
2020-12-29 13:12:12

示例二,延伸示例:

private static void printBugDateExtend() throws ParseException {
    SimpleDateFormat sdf = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");
    Date date = sdf.parse("2019-12-31 13:12:12");
    System.out.println(date);
    String dateStr = sdf.format(date);
    System.out.println(dateStr);
}

打印结果:

Sun Dec 30 13:12:12 CST 2018
2019-12-30 13:12:12

【强制】日期格式化,传入pattern中表示年份统一使用小写的y。

说明:日期格式化时,yyyy表示当天所在的年,而大写的YYYY代表是week in which year(JDK7之后引入的概念),意思是当天所在的周属于的年份,一周从周日开始,周六结束,只要本周跨年,返回的YYYY就是下一年,另外需要注意:

表示月份是大写的M

表示分钟是小写的m

24时制是大写的H

12时制是小写的h

正例:new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!