Old Time
java.util.Date/java.util.Calendar/java.util.TimeZone/java.util.
java.text.DateFormat/java.text.SimpleDateFormat
Date为格林威治标准时(GMT),是一个时间点,1970年1月1日 00:00:00的毫秒数, 可以认为是没有时区和Locale概念
DateFormat对于不同地区的配置一般有两个点, 一个是Locale , 一个是TimeZone
Locale使DateFormat按所配置的地区特性来输出文字
TimeZone让DateFormat知道怎么去转换,去调整时间偏移度,从而得到符合配置的时区的时间
GMT与UTC的时区是一样的,都是以伦敦时间为基准. 而GMT+8时区就是北京时间所在时区.同一时刻的时间比GMT快8小时
世界时(UT 或 UTC) , 格林威治时间 (GMT), 格林威治时(GMT)和世界时(UT) 是相等的,格林威治时(GMT) 是标准的"民间"称呼, 世界时(UT) 是相同标准的科学称呼。UTC 和 UT 的区别是:UTC 是基于原子时钟的,UT 是基于天体观察的。
New Time
java.time 不可变,线程安全
java.time.Date/Time/DateTime/ZoneId
java.time.LocalDate/LocalTime/LocalDateTime/ZoneOffset/Instant/Period/Duration
java.time.Clock
java.time.chrono 日历系统
java.time.format 格式化/解析
java.time.format.DateTimeFormatter
java.time.format.DateTimeFormatterBuilder
java.time.temporal 时态
java.time.temporal.Temporal
java.time.temporal.TemporalAdjuster
java.time.zone 时区
java.time.zone.ZoneRules
text: letters number > 2
number: letters number < 3
number/text:letters >2
fraction: babi-of-second, 1~9 letters
year: two letters or 3 letters or 4 letters or >4 letters
zone id/zone offset/zone offsetid: time-zone ID, Z+xxx or GMT+xxx or region-based ID
zone offset V: time-zone ID, must be 2 letters
zone offset z: time-zone name, 1 letter, but presents multiple text
zone offset X: zone-offset 'Z' for zero, +xx or +xxxx or +xx:xx or +xxxxxx or +xx:xx:xx
zone offset x: zone-offset, 1 letter, but presents multiple text, +xx or +xxxx or +xx:xx or +xxxxxx or +xx:xx:xx
zone offset O: localized offset, must be 1 or 4, GMT+x or GMT+xx:xx
zone offset Z: 1~4 letters, +xx or +xxxx
pad modifier: n 'p' like ppH
other:keep the 6 letters [ ] { } # '
date: 年月日
time: 时分秒.纳秒
datetime: 年月日和时分秒.纳秒
instant: machine/unit时间戳,即时间点
zone id/zone offset: 时区id
zone name/zone text: 时区显示名
chronology id: 年表id
chronology name/chronology text: 年表显示名
zone rules: zone offset 定义类
period: 两个时间点之间的时间段(for unit time: instant)
duration: 两个时间点之间的时间段(for java time)
temporal: 时态对象, 比如Date, Time, Year
clock: current instant, = System.currentTimeMillis() and TimeZone.getDefault()
Symbol Meaning Presentation Examples
------ ------- ------------ -------
G era text AD; Anno Domini; A
u year year 2004; 04
y year-of-era year 2004; 04
D day-of-year number 189
M/L month-of-year number/text 7; 07; Jul; July; J
d day-of-month number 10
Q/q quarter-of-year number/text 3; 03; Q3; 3rd quarter
Y week-based-year year 1996; 96
w week-of-week-based-year number 27
W week-of-month number 4
E day-of-week text Tue; Tuesday; T
e/c localized day-of-week number/text 2; 02; Tue; Tuesday; T
F week-of-month number 3
a am-pm-of-day text PM
h clock-hour-of-am-pm (1-12) number 12
K hour-of-am-pm (0-11) number 0
k clock-hour-of-am-pm (1-24) number 0
H hour-of-day (0-23) number 0
m minute-of-hour number 30
s second-of-minute number 55
S fraction-of-second fraction 978
A milli-of-day number 1234
n nano-of-second number 987654321
N nano-of-day number 1234000000
V time-zone ID zone-id America/Los_Angeles; Z; -08:30
z time-zone name zone-name Pacific Standard Time; PST
O localized zone-offset offset-O GMT+8; GMT+08:00; UTC-08:00;
X zone-offset 'Z' for zero offset-X Z; -08; -0830; -08:30; -083015; -08:30:15;
x zone-offset offset-x +0000; -08; -0830; -08:30; -083015; -08:30:15;
Z zone-offset offset-Z +0000; -0800; -08:00;
p pad next pad modifier 1
' escape for text delimiter
'' single quote literal '
[ optional section start
] optional section end
# reserved for future use
{ reserved for future use
} reserved for future use
G Era 标志符 Text AD
y 年 Year 1996; 96
Y Weekyear Year 2009; 09
M 年中的月份 Month July; Jul; 07
L Month_in_year(standalone_form) Month July; Jul; 07
w 年中的周数 Number 27
W 月份中的周数 Number 2
D 年中的天数 Number 189
d 月份中的天数 Number 10
F 月份中的星期 Number 2
E 星期中的天数 Text Tuesday; Tue
u Day_number_of_week(1=Monday) Number 1
a Am/pm 标记 Text PM
H 一天中的小时数(0-23) Number 0
k 一天中的小时数(1-24) Number 24
K am/pm 中的小时数(0-11) Number 0
h am/pm 中的小时数(1-12) Number 12
m 小时中的分钟数 Number 30
s 分钟中的秒数 Number 55
S 毫秒数 Number 978
z 时区 General time zone Pacific Standard Time; PST; GMT-08:00
Z 时区 RFC 822 time zone -0800
E 中文永远都是星期X 英文E代表简写,如Mon, 而EEEE代表Monday, 调皮的话可以发现EE跟EEE都是简写,而再多的E都是全写
y 可能由于目前的时间都是公元四位数年(2014), 所以超过四个y都会在当前年份前加0,如yyyyy->02014, 英文其他个数都是全写, 中文如两个y,则为简写,如2014就成了14
d 所有超过两个的使用都会在应有的数字前面加0, 而且中文也不会加上日字
M 英文M跟MM为数字月份,如03, MMM则为简写Mar, 而MMMM或者更多(调皮)为March. 中文三个或以上为X月,其他都为纯数字
H K k m s等小时分钟,一个为0,超过加0
Z表示时区, 个数多少也有不同, 可参见官方文档