Old Time
java.util.Date/java.util.Calendar/java.util.TimeZone/java.util.
java.text.DateFormat/java.text.SimpleDateFormatDate为格林威治标准时(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.Clockjava.time.chrono 日历系统
java.time.format 格式化/解析
java.time.format.DateTimeFormatter java.time.format.DateTimeFormatterBuilderjava.time.temporal 时态
java.time.temporal.Temporal java.time.temporal.TemporalAdjusterjava.time.zone 时区
java.time.zone.ZoneRulestext: 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 10Q/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 3a 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 0H 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 1234000000V 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 -0800E 中文永远都是星期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表示时区, 个数多少也有不同, 可参见官方文档