日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

java JDK8 学习笔记——第13章 时间与日期

發布時間:2023/12/1 综合教程 31 生活家
生活随笔 收集整理的這篇文章主要介紹了 java JDK8 学习笔记——第13章 时间与日期 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

第十三章 時間與日期

13.1 認識時間與日期

13.1.1 時間的度量

1、格林威治標準時間GMT?
格林威治標準時間的正午是太陽抵達天空最高點之時。現在已經不作為標準時間使用。

2、世界時UT
世界時是借由觀測遠方星體跨過子午線而得,在引入UTC之前,GMT和UT是相同的。

3、國際原子時TAI?
將秒的國際單位定義為銫原子輻射振動91926331770周耗費的時間,從UT的1958年開始同步。

4、世界協調時UTC?
采用了閏秒修正,確保UTC與UT相差不會超過0.9秒,加入閏秒的時間通常會在6月底或12月底。

5、Unix時間?
定義為UTC時間1970年1月1日00:00:00為起點而經過的描述,不考慮閏秒修正,用以表達時間軸上的某一瞬間。

6、epoch?
某個特定時代的開始,時間軸上某一瞬間。

7、重點總結

(1)即使標注為GMT時間,實際上談到時間指的是UTC時間。?
(2)秒的單位定義是基于TAI,也就是銫原子輻射振動次數。
(3)UTC考慮了地球自轉越來越慢而又閏秒修正,確保哦UTC與UT相差不會超過0.9秒。?
(4)Unix時間是1970年1月1日00:00:00為起點而經過的秒數,不考慮閏秒。

13.1.2 年歷簡介

1、儒略歷
儒略歷是現今公歷的前身,用來取代羅馬歷,修正了羅馬歷隔三年設置一閏年的錯誤,改采四年一閏。

2、格里高利歷?
格里高利歷將儒略歷1582年10月4日星期四的隔天,訂為格里高利歷1582年10月15日星期五。

3、ISO 8601標準?
ISO 8601并非年歷系統,而是時間日期表示方法的標準,用意統一時間日期的數據交換格式。在ISO 8601標準的定義中,19世紀是指1900年到1999年,而格里高利歷的19世紀是指1801年到1900年。

13.1.3 認識時區

1、考慮了UTC偏移的時間表示上,通常會標識Z符號。

2、日光節約時間?
也稱為夏季時間,基本上就是在時時的第一天,讓白天的時間增加一小時,而最后一天結束后在調整一小時回來。

13.2 認識Date與Calendar

13.2.1 時間軸上瞬間的Date

1、取得系統時間的方法之一是:?
使用System.currentTimeMillis()方法,返回的是long類型的整數,代表1970年1月1日00:00:00至今經過的毫秒數。

2、Date實例?
Date實例基本上建議只用來當做時間軸上的某一瞬間。有關字符串時間格式的處理不再是Date的職責。

13.2.2 格式化時間日期的DateFormat

1、DateFormat是個抽象類,其操作類是java.text.SimpleDateFormat。

取得SimpleDateFormat實例的方法

(1)直接構建SimpleDateFormat實例?
(2)使用DateFormat的getDateInstance()、getTimeInstance()、getDateTimeInstance()等靜態方法。

2、直接構建SimpleDateFormat的好處是,可使用模式字符串自定義格式。

3、相對于DateFormat可進行日期時間格式化,java.text.NumberFormat可用來進行數字格式化,他們都是java.text.Format的子類。

13.2.3 處理時間日期的Calendar

1、Calendar實例?
用于取得某個時間日期信息,或者是對時間日期進行操作。
Calendar是個抽象類,java.util.GregorianCalendar是其子類,操作了儒略歷與格里高利歷的混合歷,通過Calendar的getInstance()取得的Calendar實例,默認就是取得GregorianCalendar的實例。

2、如果打算只針對日期中某個字段加減,則可以使用roll()方法。

3、日歷時間可以使用GregorianCalendar的setGregorianCalendar()方法來修改,設為Date(Long.MAXVALUE)就是純粹的儒略歷,設為Date(Long.MINVALUE)就是純粹的格里高利歷。

4、注意:

在Calendar實例上進行add()之類的操作,會修改Calendar實例本身,為了避免調用yearsBetween()、daysBetween()之后傳入的Calendar自變量被修改,兩個方法中都對第一個自變量進行了clone()復制對象的動作。

13.2.4 設定TimeZone

使用java.util.TimeZone的getDefault()來取得默認時區信息。

13.3 JDK8新時間日期API

13.3.1 機器時間觀點的API

1、Calendar的getTime()返回false實例,取得Date實例,下一步應該獲取時間信息,應該是通過Date的getTime()取得epoch毫秒數。

2、機器相關的時間概念——Instant類
用以代表自定義的Java epoch之后的某個時間點歷經的毫秒數,精確度基本上是毫秒。使用Instant的靜態方法now()取得代表Java epoch毫秒數的Instant實例,取得Instant實例后,可以使用plusSeconds()、plusMillis()、plusNanos()、minusSeconds()、minusMillis()、minusNanos()來做時間軸上的運算,Instant實例本身不會變動,這些操作會返回新的Instant實例,代表運算后的瞬時。

13.3.2 人類時間觀點的API

1、LocalDateTime、LocalDate和LocalTime?
這些類基于ISO 8601年歷系統,是不具失時區的時間與日期定義。LocalDateTime、LocalDate和LocalTime 等類名稱開頭為Local,表示它們都只是對時間的描述,并沒有時區信息。

2、ZonedDateTime和OffsetDateTime?
ZonedDateTime和OffsetDateTime間可以通過toXXX()方法互轉,Instant通過atZone()與atOffset()轉為ZonedDateTime和OffsetDateTime,ZonedDateTime和OffsetDateTime也都可以通過toInstant()取得Instant,ZonedDateTime和OffsetDateTime都有toLocalDate()、toLocalTime()、toLocalDateTime()方法可以取得LocalDate、LocalTime和LocalDateTime。

3、Year、YearMonth、Month和MonthDay?
Month是enum類型,想要取得代表月份的數字,不要使用oridinal()方法,需要使用getValue()方法。

13.3.3 對時間的運算

1、TemporalAmount
對于時間的計量,新時間與日期API以類Duration來定義,可擁有計量天、時、分、秒的時間差,精確度調整可以達到納秒等級,而秒的最大值可以是long類型可保存值。對于年、月、星期、日的日期差,則使用Period類定義。

2、TemporalUnit?
plus()方法另一重載版本,接受java.time.temporal.TemporalUnit實例,java.time.temporal.ChronoUnit是TemporalUnit實作類,使用enum實作。

3、Temporal
Instant、LocalDateTime、LocalDate、LocalTime、ZonedDateTime和OffsetDateTime都操作了Temporal接口。

4、TemporalAccessor
TemporalAccessor定義了只讀的時間對象讀取操作,實際上Temporal是TemporalAccessor子接口,增加了對時間的處理操作。

MonthDay是只讀的。

13.3.4 年歷系統設計

1、java.time套件中的類在需要實行年歷系統時都是單一的ISO8601年歷系統。

2、需要使用其他年歷系統時?
需要明確實行java.util.chrono中等操作了java.time.chrono.Chronology接口類。

轉載于:https://www.cnblogs.com/java-stx/p/5178514.html

閱讀世界,共赴山海423全民讀書節,邀你共讀

總結

以上是生活随笔為你收集整理的java JDK8 学习笔记——第13章 时间与日期的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。