jdk8新特性:时间api第二天

1、LocalDate 、LocalTime 、LocalDateTime:时间日期类

@Test
public void test1(){
	LocalDateTime ldt = LocalDateTime.now();
	System.out.println(ldt);// 输出:2019-09-26T10:58:49.030
	LocalDateTime ldt2 = LocalDateTime.of(2019, 9, 26, 10, 59);
	System.out.println(ldt2);// 输出:2019-09-26T10:59
	// 加2年
	LocalDateTime ldt3 = ldt.plusYears(2);
	System.out.println(ldt3);// 输出:2021-09-26T11:01:03.355
	// 减2月
	LocalDateTime ldt4 = ldt.minusMonths(2);
	System.out.println(ldt4);// 输出:2019-07-26T11:02:07.117
	// 输出年月日
	System.out.println(ldt.getYear() + "-" + ldt.getMonthValue() + "-" + ldt.getDayOfMonth());
	// 输出:2019-9-26
}

2、Instant: 时间戳(时标是从标准的Java时代1970-01-01T00:00:00Z测量的)

@Test
public void test2(){
	Instant instant = Instant.now();// 获取UTC时区
	System.out.println(instant);//输出:2019-09-27T01:26:37.237Z
	OffsetDateTime odt = instant.atOffset(ZoneOffset.ofHours(8));
	System.out.println(odt);//输出:2019-09-27T09:27:05.845+08:00
	// 获取毫秒
	System.out.println(instant.toEpochMilli());//输出:1569547680077
	// 增加秒数
	instant = Instant.ofEpochSecond(60);
	System.out.println(instant);//输出:1970-01-01T00:01:00Z
}

3、Duration:计算2个时间之间的间隔

@Test
public void test3(){
	Instant instant = Instant.now();
	try {
		Thread.sleep(1000);
	} catch (InterruptedException e) {
		e.printStackTrace();
	}
	Instant instant2 = Instant.now();
	Duration duration = Duration.between(instant, instant2);
	System.out.println(duration.toMillis());//输出:1000
	
	LocalTime lt = LocalTime.now();
	try {
		Thread.sleep(1000);
	} catch (InterruptedException e) {
		e.printStackTrace();
	}
	LocalTime lt1 = LocalTime.now();
	System.out.println(Duration.between(lt, lt1).toMillis());//输出:1000
}

4、Period:计算2个日期之间的间隔

@Test
public void test4(){
	LocalDate ld = LocalDate.of(2015, 8, 20);
	LocalDate ld2 = LocalDate.now();
	Period period = Period.between(ld, ld2);
	System.out.println(period.getYears());//输出:4
	System.out.println(period.getMonths());//输出:1
	System.out.println(period.getDays());//输出:7
}

5、TemporalAdjuster:时间校正器

@Test
public void test5(){
	LocalDateTime ldt = LocalDateTime.now();
	System.out.println(ldt);//输出:2019-09-27T09:37:35.724
	LocalDateTime ldt2 = ldt.withDayOfMonth(10);
	System.out.println(ldt2);//输出:2019-09-10T09:38:14.318
	
	// 下个周日
	LocalDateTime ldt3 = ldt.with(TemporalAdjusters.next(DayOfWeek.SUNDAY));
	System.out.println(ldt3);//输出:2019-09-29T09:39:40.498
	
	LocalDateTime ldt4 = ldt.with((l) -> {
		LocalDateTime ldt5 = (LocalDateTime) l;
		DayOfWeek dayOfWeek = ldt5.getDayOfWeek();
		if(dayOfWeek.equals(DayOfWeek.FRIDAY)){
			return ldt5.plusDays(3);
		}else if(dayOfWeek.equals(DayOfWeek.SATURDAY)){
			return ldt5.plusDays(2);
		}else{
			return ldt5.plusDays(1);
		}
	});
	System.out.println(ldt4);//输出:2019-09-30T10:12:14.922
}

6、DateTimerForMatter:格式化时间/日期

@Test
public void test6(){
	DateTimeFormatter dtf = DateTimeFormatter.ISO_DATE_TIME;
	LocalDateTime ldt = LocalDateTime.now();
	String datestr = ldt.format(dtf);
	System.out.println(datestr);//输出:2019-09-27T09:46:20.233
	
	// 自定义格式化
	DateTimeFormatter dtf2 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
	String datestr1 = dtf2.format(ldt);
	System.out.println(datestr1);//输出:2019-09-27 09:47:27
	
	// 字符串转时间
	LocalDateTime ldt2 = LocalDateTime.parse(datestr1, dtf2);
	System.out.println(ldt2);// 2019-09-27T09:49:20		
}

7、时区的处理:ZonedDate、ZonedTime、ZonedDateTime

@Test
public void test8(){
	// 指定一个时区获取当前时间
	LocalDateTime ldt = LocalDateTime.now(ZoneId.of("Europe/Monaco"));
	System.out.println(ldt);//输出:2019-09-27T03:53:12.003
	
	LocalDateTime ldt2 = LocalDateTime.now(ZoneId.of("Asia/Shanghai"));
	ZonedDateTime zdt = ldt2.atZone(ZoneId.of("Asia/Shanghai"));
	System.out.println(zdt);//输出:2019-09-27T09:56:08.520+08:00[Asia/Shanghai]
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值