13.1.1 時間的度量
·即便標註爲GMT(格林威治時間),實際上談到的的是UTC(Unix時間)時間。
·秒的單位定義時基於TAI。也就是銫原子輻射的振動次數。
·UTC考慮了地球自轉愈來愈慢而有閏秒修正,確保UTC與UT相差不會超過0.9秒。最近一次的閏秒修正爲2012年6月30日。
·Unix時間是1970年1月1日00:00:00爲起點二通過的描述,不考慮閏秒,不少Unix系統、平臺、軟件等,都選擇這時間做爲時間表示發的起算點。html
13.1.2 年曆簡介java
·儒略曆:修正了羅馬歷隔三年設置一閏年的錯誤,改採四年一閏。
·格力高利歷:將儒略曆1582年10月4號星期四的隔天,訂爲格里高利曆1582年10月15日星期五。
·ISO 8601標準,採用統一的數據格式例如:yyyy-mm-ddTHHH:MM:SS.SSS等。學習
13.1.3 認識時區設計
UTL偏移
日光節約時間:也稱爲夏季時間,基本上就是在實施的第一天,讓白天的時間增長一小時,而最後一天結束後再調整一小時回來。code
13.2.1 時間軸上瞬間的Dateorm
·若是想取得系統時間,方法之一就是使用System.currentTimeMillis()方法,返回long類型整數,表明1970年1月1日0時0分0秒0毫秒至今通過的毫秒數。
P429範例以下:htm
package CH7; /** * Created by Administrator on 2016/4/16. */ import java.util.*; import static java.lang.System.*; public class DateDemo { public static void main(String[] args) { Date date1 = new Date(currentTimeMillis()); Date date2 = new Date(); out.println(date1.getTime()); out.println(date2.getTime()); } }
有關於字符串時間格式的處理,再也不是Date的職責。對象
13.2.2 格式化時間日期的DateFormatblog
有關字符串時間格式的處理,職責落到了java.text.DateFormat身上。能夠經過DAteForm的各類靜態方法,進行格式化;還可使用模式字符串自定義格式。開發
parse()方法,能夠將指定的字符串剖析爲Date實例。
package CH7; /** * Created by Administrator on 2016/4/16. */ import java.util.*; import java.text.*; public class HowOld { public static void main(String[] args) throws Exception { System.out.print("輸入出生年月日(yyy-mm-dd):"); DateFormat dateFormat = new SimpleDateFormat("yyy-mm-dd"); Date birthDate = dateFormat.parse(new Scanner(System.in).nextLine()); Date currentDate = new Date(); long life = currentDate.getTime()-birthDate.getTime(); System.out.println("你今年的歲數爲:"+(life/(365*24*60*60*1000L))); } }
13.2.3 處理時間日期的Calendar
·Date建議做爲時間軸上的瞬時表明,要格式化時間日期則經過DateFormat,若是想要取得某個時間日期信息,或者是對時間日期進行操做,可使用calendar。
·創建Calendar實例,可使用get()方法並指定Calendar上的字段。 使用add()方法改編時間,使用roll()方法只針對日期中的某個字段加減。
13.2.4 設定TimeZone
·使用Calendar時,並無使用時區信息,這回使用該默認時區,可使用java.util.TImeZone的getDefault()來取得默認時區信息
·可用的ID可使用TimeZone.getAvailableIDs()來取得,它會返回String[]
13.3.1 機器時間觀點的API
·因爲某一時區已經不實施日光節約一段時間了,許多開發者並不知道過去有過日光節約時間,在取得Date實例後,被名稱Date誤導他們表明日期,因此不該該使用Data實例來得知人類觀點的時間信息。
·真正可靠的信息只有內含epoch毫秒數。同時也可使用Instant的靜態方法now()取得表明Java epoch毫秒數的Instant實例。
13.3.2 人類時間觀點的API
·LocalDateTime只包括時間與日期,LocalDate只有日期,LocalTime只有時間,他們都是對時間的描述,沒有時區信息。
·若須要時區信息,可基於上述三個時間描述的ZoneDateTime和OffsetDateTIme.
13.3.3 對時間的運算
1.TemporalAmount
時間差以Duration定義,日期差以Period定義。
2.TemporalUnit
between()方法用於計算時間差
3.Temporal
4.TemporalAccessor定義了只讀的時間對象
從P432代碼運行結果上看:
正如書上解釋的那樣,一年的毫秒數並非如這個範例中,能夠簡單的使用3652460601000計算出來,實際上算出來的歲數也是錯的,撰寫的時間點是2016/4/16.由於還沒過5/26,因此應當是40歲。
代碼行數(新增/累積) | 博客量(新增/累積) | 學習時間(新增/累積) | 重要成長 | |
---|---|---|---|---|
目標 | 5000行 | 30篇 | 400小時 | |
第一週 | 100/100 | 1/2 | 10/15 | |
第二週 | 100/200 | 2/4 | 15/30 | |
第三週 | 300/500 | 1/5 | 30/60 | |
第四周 | 300/800 | 1/6 | 30/90 | |
第五週 | 347/1147 | 1/7 | 30/120 | |
第六週 | 352/1499 | 2/9 | 30/150 | |
第七週 | 258/1757 | 2/11 | 30/180 |