Java8 日期和時間使用總結

1、LocalDatecode

一、LocalDate並不包含當天的時間信息,也不附帶任何與時區有關的信息。對象

二、建立方法blog

(1)經過靜態工廠方法建立一個LocalDate實例。
LocalDate date = LocalDate.of(2014,3,8)
(2)LocalDate today = LocalDate.now();
(3)LocalDate date = LocalDate.parse("2014-03-18");

三、讀取LocalDate對象的值three

(1)直接讀取get

LocalDate date = LocalDate.of(2014,3,18);
int year = date.getYear();//2014
Month month = date.getMonth(); //MARCH
int day = date.getDayOfMonth(); //18
DayOfWeek dow = date.getDayOfWeek();//TUESDAY
int len = date.lengthOfMonth(); //31
boolean leap = date.isLeapYear(); //false

(2)使用TemporalFieldit

LocalDate date = LocalDate.of(2014,3,18);
int year = date.get(ChronoField.YEAR);//2014
int month = date.get(ChronoField.MONTH_OF_YEAR); // 3
int day = date.get(ChronoField.DAY_OF_MONTH); //18

2、LocalTimeio

一、建立方法ast

(1)LocalTime time1  = LocalTime.of(13,3);//時,分
(2)LocalTime time2  = LocalTime.of(13,3,18);//時,分,秒
(3)LocalTime time3 = LocalTime.parse("13:45:50");

二、讀取LocalTime的值date

int hour = time3.getHour();
int minute = time3.getMinute();
int second = time3.getSecond();

3、合併日期和時間方法

LocalDate date = LocalDate.parse("2014-03-18");
LocalTime time  = LocalTime.of(13,3);//時,分
LocalDateTime dt1 = LocalDateTime.of(2014,Month.AUGUST,18,13,45,20);
LocalDateTime dt2 = LocalDateTime.of(date,time);
LocalDateTime dt3 = date.atTime(time);
LocalDateTime dt4 = date.atTime(13,3);
LocalDateTime dt5 = date.atTime(13,3,30);
LocalDateTime dt6 = time.atDate(date);
LocalDate date1 = dt6.toLocalDate();
LocalTime time3 = dt6.toLocalTime();

4、機器的日期和時間格式

一、建立方法

Instant.ofEpochSecond(3);
Instant.ofEpochSecond(3,0);
Instant.ofEpochSecond(2,1000000000);
Instant.ofEpochSecond(4,-1000000000);
Instant.now();

5、Duration

用來表示兩個LocalDateTime,兩個LocalTime,兩個Instant之間的間隔時長。

一、建立方法

Instant instant1 =  Instant.ofEpochSecond(3);
Instant instant2 = Instant.ofEpochSecond(3,0);
LocalTime time1  = LocalTime.of(13,3);//時,分
LocalTime time2  = LocalTime.of(13,3);//時,分
LocalDateTime dt1 = LocalDateTime.of(2014,Month.AUGUST,18,13,45,20);
LocalDateTime dt2 = LocalDateTime.of(2014,Month.AUGUST,18,13,45,20);
Duration d1 = Duration.between(instant1,instant2);
Duration d2 = Duration.between(time1,time2);
Duration d3 = Duration.between(dt1,dt2);

二、直接建立對應實例

Duration threeMinutes = Duration.ofMinutes(3);
Duration threeMinutes = Duration.of(3, ChronoUnit.MINUTES);

6、Period

以年月日的方式對多個時間單位建模。該類的工廠方法between,能夠獲得兩個LocalDate之間的時長

一、建立方法

LocalDate date1 = LocalDate.parse("2014-03-18");
LocalDate date2 = LocalDate.parse("2014-03-18");
Period period = Period.between(date2,date1);

二、直接建立對應實例

Period tenDays = Period.ofDays(10);
Period tenWeeks = Period.ofWeeks(10);
Period tenYearsSixMonthOneDay = Period.of(10,6,1);

7、操做日期

使用以下方法操做日期後,返回一個修改了屬性的對象。它們都不會修改原來的對象。

一、以比較直觀的方式操做LocalDate的屬性

LocalDate date1 = LocalDate.parse("2014-03-18");
LocalDate date2 = date1.withYear(2011);//2011-03-18
LocalDate date3 = date1.withDayOfMonth(24);//2011-03-24
LocalDate date4 = date1.with(ChronoField.MICRO_OF_DAY,9);//2011-09-24

二、採用with方法,它接收一個TemporalField對象,全部日期和時間API都實現了get和with方法,它們將TemporalField的讀取和修改區分開。

LocalDate date1 = LocalDate.parse("2014-03-18");
LocalDate startDate =date1.with(TemporalAdjusters.firstDayOfMonth());
LocalDate endtDate = date1.with(TemporalAdjusters.firstDayOfMonth());

三、以相對方式修改LocalDate對象的屬性

LocalDate date1 = LocalDate.parse("2014-03-18");
LocalDate date2 =  date1.plusWeeks(1);//2014-03-25
LocalDate date3 = date1.minusYears(3);//2011-03-25
LocalDate date4 = date1.plus(6,ChronoUnit.MONTHS);//2011-09-25

8、更復雜的操做

好比將日期調整到下個週日,下個工做日,或者本月的最後一天,,可以使用重載版本的with,向其傳遞一個提供了更多定製化選擇的TemporalAdjuster對象,更加靈活的處理日期。

LocalDate date1 = LocalDate.parse("2014-03-18");
LocalDate date2 =  date1.with(nextOrSame(DayOfWeek.SATURDAY));//2014-03-23
LocalDate date3 = date1.with(lastDayOfMonth());//2011-03-31

相關文章
相關標籤/搜索