关于日期格式yyyy-MM-dd和YYYY-MM-dd

关于日期格式yyyy-MM-dd和YYYY-MM-dd

Scroll Down

是由

在前几天部署项目时,完事之后,由于没有严格的测试,将项目直接部署到生产环境,第二天又是周末,业务人员反映生产环境的今天之后的订单查询不到,我就知道完了,出大事, 连忙从床上起来,进行debug,重现测试环境的。发现时同事时间格式将yyyy-MM-dd写成YYYY-MM-dd,导致2019-12-28日变成了2020-12-28

yY 的区别

在Java中,我们大多数情况下格式日期都是用的SimpleDateFormat,比如说把一个日期格式成"yyyy-MM-dd"的形式。

我们要注意的是,对于年份来说,大写的Y和小写的y其意义是不同的。

y 是Year, Y表示的是Week year

经过试验,得出的结果如下:Week year 意思是当天所在的周属于的年份,一周从周日开始,周六结束,只要本周跨年,那么这周就算入下一年。

package time;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * Created by sheting on 10/20/2017
 */
public class Test {
    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance();
        // 2014-12-31
        calendar.set(2014, Calendar.DECEMBER, 31);
        Date strDate1 = calendar.getTime();
        // 2015-01-01
        calendar.set(2015, Calendar.JANUARY, 1);
        Date strDate2 = calendar.getTime();
        // 大写YYYY
        DateFormat formatUpperCase = new SimpleDateFormat("YYYY/MM/dd");
        System.out.println("2014-12-31 to YYYY/MM/dd: " + formatUpperCase.format(strDate1)); //2014-12-31 to YYYY/MM/dd: 2015/12/31
        System.out.println("2015-01-01 to YYYY/MM/dd: " + formatUpperCase.format(strDate2)); //2015-01-01 to YYYY/MM/dd: 2015/01/01
        // 小写YYYY
        DateFormat formatLowerCase = new SimpleDateFormat("yyyy/MM/dd");
        System.out.println("2014-12-31 to yyyy/MM/dd: " + formatLowerCase.format(strDate1)); //2014-12-31 to yyyy/MM/dd: 2014/12/31
        System.out.println("2015-01-01 to yyyy/MM/dd: " + formatLowerCase.format(strDate2)); //2015-01-01 to yyyy/MM/dd: 2015/01/01
    }
}

SimpleDateFormat 自定义格式中常用的字母及含义

字母含义示例
y年份。一般用 yy 表示两位年份,yyyy 表示 4 位年份使用 yy 表示的年扮,如 11;
使用 yyyy 表示的年份,如 2011
M月份。一般用 MM 表示月份,如果使用 MMM,则会根据语言环境显示不同语言的月份使用 MM 表示的月份,如 05;
使用 MMM 表示月份,在 Locale.CHINA
语言环境下,如“十月”;在 Locale.US
语言环境下,如 Oct
d月份中的天数。一般用 dd 表示天数使用 dd 表示的天数,如 10
D年份中的天数。表示当天是当年的第几天, 用 D 表示使用 D 表示的年份中的天数,如 295
E星期几。用 E 表示,会根据语言环境的不同, 显示不同语言的星期几同语言的星期几使用 E 表示星期几,在 Locale.CHINA 语言环境下,如“星期四”;
在 Locale.US 语言环境下,如 Thu
H一天中的小时数(0~23)。一般用 HH 表示小时数使用 HH 表示的小时数,如 18
h一天中的小时数(1~12)。一般使用 hh 表示小时数使用 hh 表示的小时数,如 10 (注意 10 有可能是 10点,也可能是 22 点)
m分钟数。一般使用 mm 表示分钟数使用 mm 表示的分钟数,如 29
s秒数。一般使用 ss 表示秒数使用 ss 表示的秒数,如 38
S毫秒数。一般使用 SSS 表示毫秒数使用 SSS 表示的毫秒数,如 156