更新時(shí)間:2021-07-05 來源:黑馬程序員 瀏覽量:
為了滿足更多的需求,JDK 8中新增了一個java.time包,在該包下包含了更多的日期和時(shí)間操作類,其常用類如表1所示。
表1 JDK 8新增日期、時(shí)間常用類
類名 | 功能描述 |
---|---|
Clock | 用于獲取指定時(shí)區(qū)的當(dāng)前日期、時(shí)間。 |
DayOfWeek | 枚舉類,定義了一周七天周一到周日的枚舉值 |
Duration | 表示持續(xù)時(shí)間。該類提供的ofXxx()方法用于獲取指定的時(shí)間的小時(shí)、分鐘、秒數(shù)等。 |
Instant | 表示一個具體時(shí)刻,可以精確到納秒。該類提供了靜態(tài)的now()方法來獲取當(dāng)前時(shí)刻,提供了靜態(tài)的now(Clock clock)方法來獲取clock對應(yīng)的時(shí)刻。同時(shí)還提供了一系列的plusXxx()方法來獲取當(dāng)前時(shí)刻基礎(chǔ)上加上一段時(shí)間,以及一系列的minusXxx()方法在當(dāng)前時(shí)刻基礎(chǔ)上減去一段時(shí)間。 |
LocalDate | 表示不帶時(shí)區(qū)的日期,如2018-01-27。該類提供了靜態(tài)的now()方法來獲取當(dāng)前日期,提供了靜態(tài)的now(Clock clock)方法來獲取clock對應(yīng)的日期。同時(shí)還提供了一系列的plusXxx()方法在當(dāng)前年份基礎(chǔ)上加上幾年、幾月、幾日等,以及一系列的minusXxx()方法在當(dāng)前年份基礎(chǔ)上減去幾年、幾月、幾日等。 |
LocalTime | 表示不帶時(shí)區(qū)的時(shí)間,如14:49:20。該類提供了靜態(tài)的now()方法來獲取當(dāng)前時(shí)間,提供了靜態(tài)的now(Clock clock)方法來獲取clock對應(yīng)的時(shí)間。同時(shí)還提供了一系列的plusXxx()方法在當(dāng)前年份基礎(chǔ)上加上幾小時(shí)、幾分、幾秒等,以及一系列的minusXxx()方法在當(dāng)前年份基礎(chǔ)上減去幾小時(shí)、幾分、幾秒等。 |
LocalDateTime | 表示不帶時(shí)區(qū)的日期、時(shí)間。該類提供了靜態(tài)的now()方法來獲取當(dāng)前日期、時(shí)間,提供了靜態(tài)的now(Clock clock)方法來獲取clock對應(yīng)的日期、時(shí)間。同時(shí)還提供了一系列的plusXxx()方法在當(dāng)前年份基礎(chǔ)上加上幾年、幾月、幾日、幾小時(shí)、幾分、幾秒等,以及一系列的minusXxx()方法在當(dāng)前年份基礎(chǔ)上減去幾年、幾月、幾日、幾小時(shí)、幾分、幾秒等。 |
Month | 枚舉類,定義了一月到十二月的枚舉值 |
MonthDay | 表示月日,如--01-27。該類提供了靜態(tài)的now()方法來獲取當(dāng)前月日,提供了靜態(tài)的now(Clock clock)方法來獲取clock對應(yīng)的月日。 |
Year | 表示年,如2018。該類提供了靜態(tài)的now()方法來獲取當(dāng)前年份,提供了靜態(tài)的now(Clock clock)方法來獲取clock對應(yīng)的年份。同時(shí)還提供了plusYears()方法在當(dāng)前年份基礎(chǔ)上增加幾年,以及minusYears()方法在當(dāng)前年份基礎(chǔ)上減去幾年。 |
YearMonth | 表示年月,如2018-01。該類提供了靜態(tài)的now()方法來獲取當(dāng)前年月,提供了靜態(tài)的now(Clock clock)方法來獲取clock對應(yīng)的年月。同時(shí)還提供了plusXxx()方法在當(dāng)前年月基礎(chǔ)上增加幾年、幾月,以及minusXxx()方法在當(dāng)前年月基礎(chǔ)上減去幾年、幾月。 |
ZoneId | 表示一個時(shí)區(qū) |
ZonedDateTime | 表示一個時(shí)區(qū)化的日期、時(shí)間 |
文件1 Example23
import java.time.*; public class Example23 { public static void main(String[] args) { // 1、Clock的使用 Clock clock = Clock.systemUTC(); System.out.println("獲取UTC時(shí)區(qū)轉(zhuǎn)換的當(dāng)前時(shí)間:" + clock.instant()); System.out.println("獲取UTC時(shí)區(qū)轉(zhuǎn)換的的毫秒數(shù):" + clock.millis()); // 2、Duration的使用 Duration d = Duration.ofDays(1); System.out.println("一天等于" + d.toHours() +"小時(shí)"); System.out.println("一天等于" + d.toMinutes() +"分鐘"); System.out.println("一天等于" + d.toMillis() +"秒"); // 3、Instant的使用 Instant instant = Instant.now(); System.out.println("獲取UTC時(shí)區(qū)的當(dāng)前時(shí)間為:" + instant); System.out.println("當(dāng)前時(shí)間一小時(shí)后的時(shí)間為:" + instant.plusSeconds(3600)); System.out.println("當(dāng)前時(shí)間一小時(shí)前的時(shí)間為:" + instant.minusSeconds(3600)); // 4、LocalDate的使用 LocalDate localDate = LocalDate.now(); System.out.println("從默認(rèn)時(shí)區(qū)的系統(tǒng)時(shí)鐘獲得當(dāng)前日期:" + localDate); // 5、LocalTime的使用 LocalTime localTime = LocalTime.now(); System.out.println("從默認(rèn)時(shí)區(qū)的系統(tǒng)時(shí)鐘獲取當(dāng)前時(shí)間:" + localTime); // 6、LocalDateTime的使用 LocalDateTime localDateTime = LocalDateTime.now(); System.out.println("從默認(rèn)時(shí)區(qū)的系統(tǒng)時(shí)鐘獲取日期、時(shí)間:" + localDateTime); LocalDateTime times = localDateTime.plusDays(1) .plusHours(3).plusMinutes(30); System.out.println("當(dāng)前的日期、時(shí)間加上1天3小時(shí)30分之后:" + times); // 7、Year、YearMonth、MonthDay的使用 Year year = Year.now(); System.out.println("當(dāng)前年份為:" + year); YearMonth yearMonth = YearMonth.now(); System.out.println("當(dāng)前年月為:" + yearMonth); MonthDay monthDay = MonthDay.now(); System.out.println("當(dāng)前月日為:" + monthDay); // 8、 獲取系統(tǒng)默認(rèn)時(shí)區(qū) ZoneId zoneId = ZoneId.systemDefault(); System.out.println("當(dāng)前系統(tǒng)默認(rèn)時(shí)區(qū)為:" + zoneId); } }
運(yùn)行結(jié)果如圖1所示。
圖1 運(yùn)行結(jié)果
文件1中,演示了JDK 8新增日期時(shí)間、包中類的一些用法。需要注意的是,從圖5-23可以看出,通過clock.instant()和Instant.now()獲取的當(dāng)前時(shí)間與本地系統(tǒng)顯示時(shí)間有8個小時(shí)的時(shí)差,這是因?yàn)镮nstant默認(rèn)使用的是UTC(Universal Time Coordinated)世界協(xié)調(diào)時(shí)間,又稱世界標(biāo)準(zhǔn)時(shí)間,UTC 提供了一種與時(shí)區(qū)無關(guān)的時(shí)間,與CST(China Standard Time)中國標(biāo)準(zhǔn)時(shí)間(北京時(shí)間)有8個小時(shí)的時(shí)差。