java8日期加本地_Java8新特性_新时间与日期 API-本地时间与时间戳、时间校正器、-时间格式化与时区的处理...

1、概览

1、LocalDate、LocalTime、LocalDateTime

提供十分丰富的时间与日期的表示、计算方法

2、Instant : 时间戳

(使用 Unix 元年 1970年1月1日 00:00:00 所经历的毫秒值)

3、Duration : 用于计算两个“时间”间隔

4、Period : 用于计算两个“日期”间隔

5、TemporalAdjuster : 时间校正器

进行时间的调整、计算

6、DateTimeFormatter : 解析和格式化日期或时间

7、ZonedDate、ZonedTime、ZonedDateTime : 带时区的时间或日期

2、源码

package com.atguigu.java8;

import java.time.DayOfWeek;

import java.time.Duration;

import java.time.Instant;

import java.time.LocalDate;

import java.time.LocalDateTime;

import java.time.OffsetDateTime;

import java.time.Period;

import java.time.ZoneId;

import java.time.ZoneOffset;

import java.time.ZonedDateTime;

import java.time.format.DateTimeFormatter;

import java.time.temporal.TemporalAdjusters;

import java.util.Set;

import org.junit.Test;

public class TestLocalDateTime {

//6.ZonedDate、ZonedTime、ZonedDateTime : 带时区的时间或日期

@Test

public void test7(){

LocalDateTime ldt = LocalDateTime.now(ZoneId.of("Asia/Shanghai"));

System.out.println(ldt);

ZonedDateTime zdt = ZonedDateTime.now(ZoneId.of("US/Pacific"));

System.out.println(zdt);

}

@Test

public void test6(){

Set set = ZoneId.getAvailableZoneIds();

set.forEach(System.out::println);

}

//5. DateTimeFormatter : 解析和格式化日期或时间

@Test

public void test5(){

//DateTimeFormatter dtf = DateTimeFormatter.ISO_LOCAL_DATE;

DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss E");

LocalDateTime ldt = LocalDateTime.now();

String strDate = ldt.format(dtf);

System.out.println(strDate);

LocalDateTime newLdt = ldt.parse(strDate, dtf);

System.out.println(newLdt);

}

//4. TemporalAdjuster : 时间校正器

@Test

public void test4(){

LocalDateTime ldt = LocalDateTime.now();

System.out.println(ldt);

LocalDateTime ldt2 = ldt.withDayOfMonth(10);

System.out.println(ldt2);

LocalDateTime ldt3 = ldt.with(TemporalAdjusters.next(DayOfWeek.SUNDAY));

System.out.println(ldt3);

//自定义:下一个工作日

LocalDateTime ldt5 = ldt.with((l) -> {

LocalDateTime ldt4 = (LocalDateTime) l;

DayOfWeek dow = ldt4.getDayOfWeek();

if(dow.equals(DayOfWeek.FRIDAY)){

return ldt4.plusDays(3);

}else if(dow.equals(DayOfWeek.SATURDAY)){

return ldt4.plusDays(2);

}else{

return ldt4.plusDays(1);

}

});

System.out.println(ldt5);

}

//3.

//Duration : 用于计算两个“时间”间隔

//Period : 用于计算两个“日期”间隔

@Test

public void test3(){

Instant ins1 = Instant.now();

System.out.println("--------------------");

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

}

Instant ins2 = Instant.now();

System.out.println("所耗费时间为:" + Duration.between(ins1, ins2));

System.out.println("----------------------------------");

LocalDate ld1 = LocalDate.now();

LocalDate ld2 = LocalDate.of(2011, 1, 1);

Period pe = Period.between(ld2, ld1);

System.out.println(pe.getYears());

System.out.println(pe.getMonths());

System.out.println(pe.getDays());

}

//2. Instant : 时间戳。 (使用 Unix 元年 1970年1月1日 00:00:00 所经历的毫秒值)

@Test

public void test2(){

Instant ins = Instant.now(); //默认使用 UTC 时区

System.out.println(ins);

OffsetDateTime odt = ins.atOffset(ZoneOffset.ofHours(8));

System.out.println(odt);

System.out.println(ins.getNano());

Instant ins2 = Instant.ofEpochSecond(5);

System.out.println(ins2);

}

//1. LocalDate、LocalTime、LocalDateTime

@Test

public void test1(){

LocalDateTime ldt = LocalDateTime.now();

System.out.println(ldt);

LocalDateTime ld2 = LocalDateTime.of(2016, 11, 21, 10, 10, 10);

System.out.println(ld2);

LocalDateTime ldt3 = ld2.plusYears(20);

System.out.println(ldt3);

LocalDateTime ldt4 = ld2.minusMonths(2);

System.out.println(ldt4);

System.out.println(ldt.getYear());

System.out.println(ldt.getMonthValue());

System.out.println(ldt.getDayOfMonth());

System.out.println(ldt.getHour());

System.out.println(ldt.getMinute());

System.out.println(ldt.getSecond());

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值