@Test
public void dateTest() {
// 指定了兩個(gè)時(shí)間
// 通過(guò)指定具體的 年月日時(shí)分秒 構(gòu)建 一個(gè) LocalDateTime 對(duì)象(無(wú)時(shí)區(qū)), 綁定 到 北京時(shí)區(qū),轉(zhuǎn)為 實(shí)例,構(gòu)建Date 對(duì)象
test(Date.from(LocalDateTime.of(2020,12,27,12,1,35).atZone(ZoneId.of("Asia/Shanghai")).toInstant()));
test(Date.from(LocalDateTime.of(2020,12,26,12,1,35).atZone(ZoneId.of("Asia/Shanghai")).toInstant()));
}
private void test(Date date) {
String loY = "yyyy-MM-dd HH:mm:ss";
String upY = "YYYY-MM-dd HH:mm:ss";
SimpleDateFormat loF = new SimpleDateFormat(loY);
SimpleDateFormat upF = new SimpleDateFormat(upY);
System.out.println("小Y格式化:" + loF.format(date));
System.out.println("大Y格式化:" + upF.format(date));
System.out.println("===========================");
}
小Y格式化:2020-12-27 12:01:35
大Y格式化:2021-12-27 12:01:35
===========================
小Y格式化:2020-12-26 12:01:35
大Y格式化:2020-12-26 12:01:35
===========================
結(jié)果分析
發(fā)現(xiàn)當(dāng)日期為 2020-12-27 時(shí),兩個(gè) SimpleDateFormat 對(duì)象的轉(zhuǎn)換的出來(lái)年份不一樣,原因時(shí)一個(gè)的樣式使用的 年份的 標(biāo)識(shí)不同 "YYYY" 和 "yyyy"
具體原因時(shí),"Y"是表示周年,表示:當(dāng)天所在的周屬于的年份,一周從周日開(kāi)始,周六結(jié)束,只要本周跨年,那么這周就算入下一年
對(duì)于周年的具體解釋:
參考:GregorianCalendar#getWeekYear() 這個(gè)方法上的注釋
返回此公歷所代表的周年。從“1”到“最大周數(shù)”之間的周中的日期具有相同的“周年”值,可以是“年(日歷年)”值的前一年,也可以是“年(日歷年)”值的后一年。
此方法在計(jì)算周年之前調(diào)用
就是說(shuō)對(duì)于年份的區(qū)分,是把一年的天數(shù),分成多少周(能整除的天數(shù),就算這個(gè)周年表示的年份和當(dāng)前的公歷年份相同),后面多余不滿(mǎn)一周當(dāng)年的多余天數(shù)的就表示是下一個(gè)周年(就是當(dāng)前公歷年份的下一年)
說(shuō)明
這里為了舉例方便使用了 SimpleDateFormat 類(lèi),但是該類(lèi)是線(xiàn)程不安全得,已經(jīng)不推薦使用,需要特別注意,建議使用 DateTimeFormatter 類(lèi)進(jìn)行時(shí)間格式化
SimpleDateFormat 類(lèi)上的注釋中的一些說(shuō)明
Letter Date or Time Component Presentation Examples G
Era designator Text AD
y
Year Year 1996
;96
Y
Week year Year 2009
;09
M
Month in year (context sensitive) Month July
;Jul
;07
L
Month in year (standalone form) Month July
;Jul
;07
w
Week in year Number 27
W
Week in month Number 2
D
Day in year Number 189
d
Day in month Number 10
F
Day of week in month Number 2
E
Day name in week Text Tuesday
;Tue
u
Day number of week (1 = Monday, ..., 7 = Sunday) Number 1
a
Am/pm marker Text PM
H
Hour in day (0-23) Number 0
k
Hour in day (1-24) Number 24
K
Hour in am/pm (0-11) Number 0
h
Hour in am/pm (1-12) Number 12
m
Minute in hour Number 30
s
Second in minute Number 55
S
Millisecond Number 978
z
Time zone General time zone Pacific Standard Time
;PST
;GMT-08:00
Z
Time zone RFC 822 time zone -0800
X
Time zone ISO 8601 time zone -08
;-0800
;-08:00
聯(lián)系客服