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

相关文章
相关标签/搜索