欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JDK1.8新特性

程序员文章站 2022-03-04 08:38:38
...

Date-Time API:
新增的日期时间API(LocalDate、 LocalTime、 LocalDateTime类)
获取对象的方法:

方式1
通过静态方法 now();
		例:LocalDateTime ldt = LocalDateTime.now();

方式2
通过静态方法of(),方法参数可以指定年月日时分秒
		例:LocalDateTime of = LocalDateTime.of(2018, 12, 30, 20, 20, 20);

常用方法:

	1.与获取相关的方法:get系类的方法
		ldt.getYear();		获取年
		ldt.getMinute();	获取分钟
		ldt.getHour();		获取小时
		getDayOfMonth 		获得月份天数(1-31)
		getDayOfYear		获得年份天数(1-366)
		getDayOfWeek	    获得星期几(返回一个 DayOfWeek枚举值)
		getMonth 			获得月份, 返回一个 Month 枚举值
		getMonthValue 		获得月份(1-12)
		getYear 			获得年份
	2.格式化日期日期字符串的方法 
		format()
			例:String yyyy = ldt.format(DateTimeFormatter.ofPattern("yyyy"));
	3.转换的方法
		 toLocalDate();
		 toLocalTime();
			例:LocalDate localDate = ldt.toLocalDate();
			例:LocalTime localTime = ldt.toLocalTime();
	4.判断的方法
		isAfter()		判断一个日期是否在指定日期之后
		isBefore()		判断一个日期是否在指定日期之前
		isLeapYear()	判断是否是闰年注意是LocalDate类中的方法
			例: boolean after = ldt.isAfter(LocalDateTime.of(2024, 1, 1, 2, 3));
			例:boolean b= LocalDate.now().isLeapYear();

	5.解析的静态方法parse("2007-12-03T10:15:30");
		paser() 将一个日期字符串解析成日期对象,注意字符串日期的写法的格式要正确,否则解析失败
		例:
		    LocalDateTime parse = LocalDateTime.parse("2007-12-03T10:15:30");
			LocalDateTime ldt4 = LocalDateTime.now();
			DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
			LocalDateTime.parse("2018-01-21 20:30:36", formatter2);

	6.添加年月日时分秒的方法 
		plus系列的方法,都会返回一个新的LocalDateTime的对象
		例:
		LocalDateTime localDateTime = ldt.plusYears(1);
		LocalDateTime localDateTime1 = ldt.plusMonths(3);
		LocalDateTime localDateTime2=ldt.plusHours(10);
		
	7.减去年月日时分秒的方法 
		minus系列的方法,注意都会返回一个新的LocalDateTime的对象
		例:LocalDateTime localDateTime2 = ldt.minusYears(8);
		
	8.指定年月日时分秒的方法 
		with系列的方法,注意都会返回一个新的LocalDateTime的对象
		例:
		LocalDateTime localDateTime3 = ldt.withYear(1998);
		TemporalAdjusters.dayOfWeekInMonth(2, DayOfWeek.FRIDAY) 
		//这个月的第二个星期五是几号
		LocalDateTimewith1=now.with(TemporalAdjusters.dayOfWeekInMonth(2,DayOfWeek.FRIDAY));

Instant 时间戳类:
该类模型在时间线上的一个瞬时点,被用来记录应用程序中的事件时间戳。

常用方法:

1、获取对象的方法
	now()   //注意默认获取出来的是当前的美国时间和我们相差八个小时
	    例:
		Instant ins = Instant.now();
		System.out.println(ins);    
	    //我们在东八区,所以加8个小时 就是我们的北京时间
	    
2、Instant中设置偏移量的方法:
	atOffset() 	设置偏移量
		例:
		OffsetDateTime time = ins.atOffset(ZoneOffset.ofHours(8));
		System.out.println(time);
		
3、获取系统默认时区时间的方法a
	tZone()	方法的参数是要一个时区的编号可以通过时区编号类获取出来
	    例:
		ZoneId.systemDefault()获取本地的默认时区ID
		ZonedDateTime zonedDateTime = ins.atZone(ZoneId.systemDefault());
		System.out.println(zonedDateTime);
		
4、get系列的方法

	getEpochSecond() 	获取从1970-01-01 00:00:00到当前时间的秒值
	getNano()			获取到的当前时间的秒数 换算成纳秒
	long epochSecond = ins.getEpochSecond();
	  					获取从1970-01-01 00:00:00到当前时间的秒值
	getNano()			把获取到的当前时间的豪秒数 换算成纳秒 
		例:
		当前时间是2018-01-01 14:00:20:30
		 int nano = ins.getNano();     //把30豪秒换算成纳秒
		 
5、ofEpochSecond()		给计算机元年增加秒数
	例: Instant instant = Instant.ofEpochSecond(5);
		 System.out.println(instant);
		 单位换算:
		     0.1 毫秒 = 10 的5次方纳秒 = 100000 纳秒
   			 1 毫秒 = 1000 微妙 = 1000000 纳秒

Duration类:
用于计算两个“时间”间隔的类
常用方法:

	1、between()       静态方法,计算两个时间的间隔,默认是秒
	例:
		Instant start = Instant.now();
		for(int i=0;i<1000L;i++){
			System.out.println("循环内容");
		}
		Instant end = Instant.now();
		Duration between = Durati’on.between(start, end);
    2、toMillis()	   将秒转成毫秒
	例:
	System.out.println(between.toMillis());

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

静态方法:
	between()		计算两个日期之间的间隔
	例:
	LocalDate s = LocalDate.of(1996, 05, 05);
	LocalDate now = LocalDate.now();
	Period be = Period.between(s, now);
	System.out.println(be.getYears());	//间隔了多少年
	System.out.println(be.getMonths()); //间隔了多少月
	System.out.println(be.getDays());   //间隔多少天

TemporalAdjuster:
时间校正器,是t一个接口

    LocalDate now = LocalDate.now();
    System.out.println(now);
1、使用TemporalAdjusters自带的常量来设置日期
    例:
	LocalDate with = now.with(TemporalAdjusters.lastDayOfYear());
	System.out.println(with);
	
2、采用TemporalAdjusters中的next方法来指定日期
	 LocalDate date = now.with(TemporalAdjusters.next(DayOfWeek.SUNDAY));
	 System.out.println(date);
	例:
	   TemporalAdjusters.next(DayOfWeek.SUNDAY) 本周的星期天
	   TemporalAdjusters.nextOrSame(DayOfWeek.MONDAY) 下一周的星期一
	
3、采用自定义的方式来指定日期
例:指定下个工作日
	public class test1 {
    public static void main(String[] args) {
        LocalDateTime ldt = LocalDateTime.now();
        LocalDateTime workDay = ldt.with(new TemporalAdjuster() {
            @Override
            public Temporal adjustInto(Temporal temporal) {
                //向下转型
                LocalDateTime ld = (LocalDateTime) temporal;
                //获取这周的星期几
                DayOfWeek dayOfWeek = ld.getDayOfWeek();
                if (dayOfWeek.equals(DayOfWeek.FRIDAY)) {
                    return ld.plusDays(3);	//如果这天是星期五,那下个工做日就加3天

                } else if (dayOfWeek.equals(DayOfWeek.SATURDAY)) {
                    return ld.plusDays(2);	//如果这天是星期六,那下个工做日就加2天

                } else {
                    return ld.plusDays(1);	//其他就加一天
                }
            }
        });
        System.out.println(workDay);
    }
}

DateTimeFormatter :
解析和格式化日期或时间的类

1、获取对象的方式,通过静态方法ofPattern("yyyy-MM-dd")
	例:
	DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd");
	LocalDateTime now = LocalDateTime.now();
	
2、format()      把一个日期对象的默认格式,格式化成指定的格式
	例:
	String format1 = dateFormat.format(now);
	System.out.println(format1);
	
3、格式化日期 
	例:
	LocalDateTime now1 = LocalDateTime.now();
	//使用日期类中的format方法,传入一个日期格式化类对象
	now1.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME);
	//使用DateTimeFormatter中提供好的日期格式常量
	
4、使用自定义的日期格式格式化字符串
	例:
	DateTimeFormatter timeFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
	//自定义一个日期格式
	String time = now1.format(timeFormat);
	System.out.println(time);

5、把一个日期字符串转成日期对象
	例:
	DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd");
	LocalDateTime parse = LocalDateTime.parse(time, timeFormat);
	//使用日期类中的parse方法传入一个日期字符串,传入对应的日期格式化类
	System.out.println(parse);

ZonedDate,ZonedTime、ZonedDateTime :
用法和 LocalDate、 LocalTime、 LocalDateTime 一样,
只不过ZonedDate,ZonedTime、ZonedDateTime 这三个
带有当前系统的默认时区
ZonelD:
世界时区类

	1、获取世界各个地方的时区的集合 
		getAvailableZoneIds();     ZoneID中的静态方法
		例:
			Set<String> availableZoneIds = ZoneId.getAvailableZoneIds();
		
	2、获取系统默认时区的ID
	例:
		ZoneId zoneId = ZoneId.systemDefault(); //Asia/Shanghai
	
	3、获取带有时区的日期时间对象
	方式1:
			//创建日期对象
	    LocalDateTime now = LocalDateTime.now();
			//获取不同国家的日期时间根据各个地区的时区ID名创建对象
		ZoneId timeID = ZoneId.of("Asia/Shanghai");
			//根据时区ID获取带有时区的日期时间对象
		ZonedDateTime time = now.atZone(timeID);
		System.out.println(time);
	方式2 :
	    	//通过时区ID 获取日期对象
		LocalDateTime now2 = LocalDateTime.now(ZoneId.of("Asia/Shanghai"));
	    System.out.println(now2);