public class TimeIntroduction { public static void testClock() throws InterruptedException { //時鐘提供給咱們用於訪問某個特定 時區的 瞬時時間、日期 和 時間的。 Clock c1 = Clock.systemUTC(); //系統默認UTC時鐘(當前瞬時時間 System.currentTimeMillis()) System.out.println(c1.millis()); //每次調用將返回當前瞬時時間(UTC) Clock c2 = Clock.systemDefaultZone(); //系統默認時區時鐘(當前瞬時時間) Clock c31 = Clock.system(ZoneId.of("Europe/Paris")); //巴黎時區 System.out.println(c31.millis()); //每次調用將返回當前瞬時時間(UTC) Clock c32 = Clock.system(ZoneId.of("Asia/Shanghai"));//上海時區 System.out.println(c32.millis());//每次調用將返回當前瞬時時間(UTC) Clock c4 = Clock.fixed(Instant.now(), ZoneId.of("Asia/Shanghai"));//固定上海時區時鐘 System.out.println(c4.millis()); Thread.sleep(1000); System.out.println(c4.millis()); //不變 即時鐘時鐘在那一個點不動 Clock c5 = Clock.offset(c1, Duration.ofSeconds(2)); //相對於系統默認時鐘兩秒的時鐘 System.out.println(c1.millis()); System.out.println(c5.millis()); } public static void testInstant() { //瞬時時間 至關於之前的System.currentTimeMillis() Instant instant1 = Instant.now(); System.out.println(instant1.getEpochSecond());//精確到秒 獲得相對於1970-01-01 00:00:00 UTC的一個時間 System.out.println(instant1.toEpochMilli()); //精確到毫秒 Clock clock1 = Clock.systemUTC(); //獲取系統UTC默認時鐘 Instant instant2 = Instant.now(clock1);//獲得時鐘的瞬時時間 System.out.println(instant2.toEpochMilli()); Clock clock2 = Clock.fixed(instant1, ZoneId.systemDefault()); //固定瞬時時間時鐘 Instant instant3 = Instant.now(clock2);//獲得時鐘的瞬時時間 System.out.println(instant3.toEpochMilli());//equals instant1 } public static void testLocalDateTime() { //使用默認時區時鐘瞬時時間建立 Clock.systemDefaultZone() -->即相對於 ZoneId.systemDefault()默認時區 LocalDateTime now = LocalDateTime.now(); System.out.println(now); //自定義時區 LocalDateTime now2 = LocalDateTime.now(ZoneId.of("Europe/Paris")); System.out.println(now2);//會以相應的時區顯示日期 //自定義時鐘 Clock clock = Clock.system(ZoneId.of("Asia/Dhaka")); LocalDateTime now3 = LocalDateTime.now(clock); System.out.println(now3);//會以相應的時區顯示日期 //不須要寫什麼相對時間 如java.util.Date 年是相對於1900 月是從0開始 //2013-12-31 23:59 LocalDateTime d1 = LocalDateTime.of(2013, 12, 31, 23, 59); //年月日 時分秒 納秒 LocalDateTime d2 = LocalDateTime.of(2013, 12, 31, 23, 59, 59, 11); //使用瞬時時間 + 時區 Instant instant = Instant.now(); LocalDateTime d3 = LocalDateTime.ofInstant(Instant.now(), ZoneId.systemDefault()); System.out.println(d3); //解析String--->LocalDateTime LocalDateTime d4 = LocalDateTime.parse("2013-12-31T23:59"); System.out.println(d4); LocalDateTime d5 = LocalDateTime.parse("2013-12-31T23:59:59.999");//999毫秒 等價於999000000納秒 System.out.println(d5); //使用DateTimeFormatter API 解析 和 格式化 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss"); LocalDateTime d6 = LocalDateTime.parse("2013/12/31 23:59:59", formatter); System.out.println(formatter.format(d6)); //時間獲取 System.out.println(d6.getYear()); System.out.println(d6.getMonth()); System.out.println(d6.getDayOfYear()); System.out.println(d6.getDayOfMonth()); System.out.println(d6.getDayOfWeek()); System.out.println(d6.getHour()); System.out.println(d6.getMinute()); System.out.println(d6.getSecond()); System.out.println(d6.getNano()); //時間增減 LocalDateTime d7 = d6.minusDays(1); LocalDateTime d8 = d7.plus(1, IsoFields.QUARTER_YEARS); //LocalDate 即年月日 無時分秒 //LocalTime即時分秒 無年月日 //API和LocalDateTime相似就不演示了 } public static void testZonedDateTime() { //即帶有時區的date-time 存儲納秒、時區和時差(避免與本地date-time歧義)。 //API和LocalDateTime相似,只是多了時差(如2013-12-20T10:35:50.711+08:00[Asia/Shanghai]) ZonedDateTime now = ZonedDateTime.now(); System.out.println(now); ZonedDateTime now2 = ZonedDateTime.now(ZoneId.of("Europe/Paris")); System.out.println(now2); //其餘的用法也是相似的 就不介紹了 ZonedDateTime z1 = ZonedDateTime.parse("2013-12-31T23:59:59Z[Europe/Paris]"); System.out.println(z1); } public static void testDuration() { //表示兩個瞬時時間的時間段 Duration d1 = Duration.between(Instant.ofEpochMilli(System.currentTimeMillis() - 12323123), Instant.now()); //獲得相應的時差 System.out.println(d1.toDays()); System.out.println(d1.toHours()); System.out.println(d1.toMinutes()); System.out.println(d1.toMillis()); System.out.println(d1.toNanos()); //1天時差 相似的還有如ofHours() Duration d2 = Duration.ofDays(1); System.out.println(d2.toDays()); } public static void testChronology() { //提供對java.util.Calendar的替換,提供對年曆系統的支持 Chronology c = HijrahChronology.INSTANCE; ChronoLocalDateTime d = c.localDateTime(LocalDateTime.now()); System.out.println(d); } /** * 新舊日期轉換 */ public static void testNewOldDateConversion(){ Instant instant=new Date().toInstant(); Date date=Date.from(instant); System.out.println(instant); System.out.println(date); } public static void main(String[] args) throws InterruptedException { testClock(); testInstant(); testLocalDateTime(); testZonedDateTime(); testDuration(); testChronology(); testNewOldDateConversion(); } }