我是靠谱客的博主 结实雪糕,最近开发中收集的这篇文章主要介绍JDK8新特性 - 新时间日期API,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

LocalDate、LocalTime、LocalDateTime

LocalDate、LocalTime、LocalDateTime 类的实例是不可变的对象,分别表示使用ISO-8601日历系统的日期、时间、日期和时间。它们提供了简单的日期或时间,并不包含当前的时间信息,也不包含与时区相关的信息。
注:ISO-8601日历系统是国际标准化组织制定的现代公民的日期和时间的表示法
在这里插入图片描述

基本使用

@Test
public void test1() {
	// 当前时间
	LocalDateTime now = LocalDateTime.now();
	System.out.println(now);
	
	// 指定时间 - 2020年4月29日16点43分33秒
	LocalDateTime ldt1 = LocalDateTime.of(2020,4,29,16,43,33);
	System.out.println(ldt1);
	
	// 时间增加 - 增加20年
	LocalDateTime ldt2 = ldt1.plusYears(20);
	System.out.println(ldt2);
	
	// 时间减少 - 减少2个月
	LocalDateTime ldt3 = ldt1.minusMonths(2);
	System.out.println(ldt3);
	
	// 打印年月日 时分秒
	System.out.println(now.getYear());
	System.out.println(now.getMonthValue());
	System.out.println(now.getDayOfMonth());
	System.out.println(now.getHour());
	System.out.println(now.getMinute());
	System.out.println(now.getSecond());
}

时间戳 - Instant

用于“时间戳”的运算,它是以Unix元年(传统的设定为UTC时区1970年1月1日午夜时分)开始所经历的描述进行运算。

@Test
public void test2() {
	// 使用 Unix 元年  1970年1月1日 00:00:00 所经历的毫秒值
	Instant ins = Instant.now(); // 默认使用UTC时区
	System.out.println(ins);
	
	OffsetDateTime odt = ins.atOffset(ZoneOffset.ofHours(8));  // 相差8个时区,进行偏移
	System.out.println(odt);
	System.out.println(ins.getNano());  // 毫秒值
	
	Instant ins2 = Instant.ofEpochSecond(5);   // 增加5秒
	System.out.println(ins2);
}

Duration 和 Period

Duration:用于计算两个时间间隔。
Period:用于计算两个日期间隔。

@Test
public void test3() {
	Instant ins1 = Instant.now();
	try {
		Thread.sleep(1000);
	}catch (Exception e) {
		e.printStackTrace();
	}
	Instant ins2 = Instant.now();
	System.out.println("相差时间间隔为:" + Duration.between(ins1, ins2));
	
	LocalDate ld1 = LocalDate.of(2016, 4, 1);
	LocalDate ld2 = LocalDate.now();
	Period period = Period.between(ld1, ld2);
	System.out.println("相差时间间隔为:" + period);
	System.out.println("年:" + period.getYears());
	System.out.println("月:" + period.getMonths());
	System.out.println("日:" + period.getDays());
}

在这里插入图片描述

日期的操纵

TemporalAdjuster : 时间校正器。有时我们可能需要获取例如:将日期调整到下个周日等操作。
TemporalAdjusters : 该类通过静态方法提供了大量的常用 TemporalAdjuster 的实现。

@Test
public void test4() {
	// 当前时间
	LocalDateTime ldt = LocalDateTime.now();
	System.out.println(ldt);

	// 这个月的10号
	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);
}

解析与格式化

@Test
public void test5() {
	// 格式化格式
	DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");
	
	LocalDateTime ldt = LocalDateTime.now();
	String strDate = ldt.format(dtf);
	System.out.println(strDate);
	// 转换回去
	LocalDateTime newLdt = ldt.parse(strDate,dtf);
	System.out.println(newLdt);
}

在这里插入图片描述

支持时区

@Test
public void test6(){
	Set<String> set = ZoneId.getAvailableZoneIds();
	set.forEach(System.out::println);
}

带时区的时间或日期

@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);
}

在这里插入图片描述

最后

以上就是结实雪糕为你收集整理的JDK8新特性 - 新时间日期API的全部内容,希望文章能够帮你解决JDK8新特性 - 新时间日期API所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(69)

评论列表共有 0 条评论

立即
投稿
返回
顶部