JDK8時間日期API

1. JDK8以前的時間日期API
1.1 java.lang.System類java

  • public static native long currentTimeMillis();
    • 用於返回當前時間與1970年1月1日0:0:0之間以毫秒爲單位的時間差
    •  時間戳

1.2 java.util.Date類sql

  • 兩個構造器
    • new Date(); —> 當前時間
    • new Date(Long 毫秒數) — > 根據毫秒數建立指定日期
  • 兩個方法的使用
    • toString() 顯示當前的年,月,日,時,分,秒
    • getTime() 獲取當前date對象的對應的毫秒數(時間戳)
  • java.util.Date 和java.sql.Date 互相轉換
    • Date date = new java.sql.Date()
    • java.sql.Date date2 = (java.sql.Date) date;
    • java.sql.Date date3 = new java.sql.Date(new Date().getTime());
  • 1.3 java.text.SimpleDateFormat類
    • Date類的API不易於國際化,大部分被廢棄,SimpleDateFormat類 一個與語言環境有關的方式來格式化和解析時間的具體類
    • format() 方法 按照具體的格式格式化時間
    • parse() 方法將字符串解析成時間

1.4 java.util.Calendar 日曆類安全

  • 獲取Calendar的實例
    • 使用其子類 (GregorianCalendar)的對象
    • 使用Calendar.getInstance()
  • 經常使用方法
  • set()
    • calendar.set(Calendar.DAY_OF_MONTH,22) —> 將日期設置爲這個月的第幾天
  • get()
    • calendar.get(Calendar.DAY_OF_MONTH)----->這個月的第幾天,返回值是int
    • calendar.get(Calendar.DAY_OF_YEAR) —>這一年的第幾天
  • add()
    • calendar.add(Calendar.DAY_OF_MONTH,3) ----> 在現有的日期上加3天
  • getTime()
    • calendar.getTime(); —> 返回Date()
  • setTime()
    • calendar.setTime(new Date()) — > 將日期設置爲某日期

2 、JDK8新日期時間的API框架

  • 可變性 : 像日期和時間這樣的類應該是不可變的,---->返回一個值,原來的對象不變
  • 偏移性 : Date中的年份是從1900開始的,而月份是從0開始的
    • 日期表示須要減 new Date(2020-1900,9-1,8) 這樣才能夠表示2020年9月8日
  • 格式化; 格式化日期只對Date有用,Calendar則不行
  • 線程不安全的,不能處理閏秒等
  • Java8 吸取了Joda-Time精華,開啓了新的API,新的java.time包含了以下子類
    • 本地日期 LocalDate
    • 本地時間 LocalTime
    • 本地日期時間 LocalDateTime
    • 時區 ZonedDateTime
    • 持續時間 Duration

2.1 、JDK8 的新日期的API線程

  • java.time -包含值對象的基礎包
  • java.time.chrono - 提供不一樣日曆系統的訪問
  • java.time.format - 格式化和解析時間和日期
  • java.time.temporal - 包含底層框架和擴展特性
  • java.time.zone - 包含時區支持的類

2.二、 LocalDate,LocalTime,LocalDateTimeorm

// LocalDate LocalTime LocalDateTime
// 獲取當前時間
LocalDate localDate = LocalDate.now();
LocalTime localTime = LocalTime.now();
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDate);
System.out.println(localTime);
System.out.println(localDateTime);

// LocalDateTime  使用頻率較高
// of() 設置指定的年月日時分秒  體現不偏移性
LocalDateTime dateTime = LocalDateTime.of(2019, 04, 10, 23, 03);
System.out.println(dateTime);

// getXxx()
System.out.println(dateTime.getDayOfMonth());
System.out.println(dateTime.getDayOfWeek());
System.out.println(dateTime.getMonth());
System.out.println(dateTime.getMinute());
System.out.println(dateTime.getMonthValue());

// withXxx   體現不可變性
LocalDate localDate1 = localDate.withDayOfMonth(12);
System.out.println(localDate);
System.out.println(localDate1);
// 設置分鐘
LocalDateTime localDateTime1 = localDateTime.withMinute(20);
System.out.println(localDateTime);
System.out.println(localDateTime1);

// plusXxx()   當前的時間作加法
LocalDate localDate2 = localDate.plusMonths(1);
System.out.println(localDate);
System.out.println(localDate2);

// 結果
   2019-04-10
   23:14:42.994
   2019-04-10T23:14:42.994
   2019-04-10T23:03
   10
   WEDNESDAY
   APRIL
   3
   4
   2019-04-10
   2019-04-12
   2019-04-10T23:14:42.994
   2019-04-10T23:20:42.994
   2019-04-10
   2019-05-10


// 獲取本初子午線的標準時間
Instant now = Instant.now();
System.out.println(now);    // 2019-04-10T15:19:51.640Z

// 東八區的時間       偏移量
OffsetDateTime offsetDateTime = now.atOffset(ZoneOffset.ofHours(8));
System.out.println(offsetDateTime); // 2019-04-10T23:21:47.598+08:00

// 距離1970年1月1日0:0:0(UTC) 開始的毫秒數
long l = now.toEpochMilli();
System.out.println(l);

// 根據偏移量獲取時間
Instant instant = Instant.ofEpochMilli(l);
System.out.println(instant);
 --------------------結果------------------------
   2019-04-10T15:23:52.587Z
   2019-04-10T23:23:52.587+08:00
   1554909832587
   2019-04-10T15:23:52.587Z


// 1. 預約義的標準格式  ISO_LOCAL_DATE_TIME,ISO_LOCAL_DATE,ISO_LOCAL_TIME
// 格式化日期 --- > 字符串
DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
LocalDateTime now1 = LocalDateTime.now();
System.out.println(formatter.format(now1));  //2019-04-14T11:26:07.555
System.out.println(now1);    //2019-04-14T11:26:07.555

// 字符串--->時間
TemporalAccessor parse = formatter.parse("2019-04-14T11:26:07.555");
System.out.println(parse);

// 方式二
// 本地化相關格式      ofLocalizedDateTime()
// FormatStyle.LONG     /   FormatStyle.MEDIUM  /   FormatStyle.SHORT
DateTimeFormatter dateTime2 = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG);
System.out.println(dateTime2.format(now1));       //2019年4月14日 上午11時30分54秒

// 方式三 自定義格式
// ofPattern("yyyy-MM-dd hh:mm:ss") -->和SimpleDateFormat類似 

 --------------------結果------------------------
2019-12-25T14:26:06.05
2019-12-25T14:26:06.050
{},ISO resolved to 2019-04-14T11:26:07.555
2019年12月25日 下午02時26分06秒
相關文章
相關標籤/搜索