java8新特性-日期时间类

在JDK1.8之前,日期和时间的处理一直是Java里面经常被吐槽的问题 JDK1.8推出了全新的日期时间API 。
在JDK1.8中引入java.time.*包,重新定义了一套日期时间处理类, 让日期时间的处理变得简单易用

1. java.time包简介

java.time包主要提供了日期、时间、瞬间、持续时间的api主要的日期时间概念,
包括时刻,持续时间,日期,时间,时区和时段。 基于ISO日历系统,所有的类都是不可变的,线程安全的

按类型主要分为:

 1. 日期和时间
 	
    1)、Instant本质上是一个数字时间戳。
    2)、LocalDate存储没有时间的日期,如2020-07-30
    3)、 LocalTime 存储没有日期的时间,如11:24
    4)、 LocalDateTime 存储日期和时间。如2020-07-30T10:25:45.969
    5)、ZonedDateTime 存储带时区的日期和时间
 2. 期限
 	1)、Duration 存储期间和持续时间。以纳秒为单位的时间线的简单测量
 
 3. 附加的类型
 	
    1)、Month 存储一个月。如“十一月”
    2)、DayOfWeek 存储一周中的一天,如“Tuesday”
    3)、Year 存储年,如“2020”
    4)、YearMonth 存储年和月,如“2020-10”,可用于信用卡上的到期
    5)、MonthDay 存储月和日,如“12-14”,可用于存储生日
    6)、OffsetTime 存储与UTC没有日期的时间和偏移量
    7)、OffsetDateTime存储与UTC的日期时间和偏移量
注:UTC
协调世界时(Coordinated Universal Time)又称世界统一时间、世界标准时间,由于英文(CUT)和法文(TUC)的缩写不同,作为妥协,简称UTC。
	

2.用法:

Instant
Instant表示的是时间线上的瞬间点,本质上就是时间戳

        Instant instant = Instant.now();
        //默认时间比北京时间相差8小时
        System.out.println(instant);//2020-07-30T03:33:40.249Z
        
        //设置时区后,显示正常时间
        System.out.println(instant.atZone(ZoneId.systemDefault()));//2020-07-30T11:35:40.381+08:00[Asia/Shanghai]
        
        //获取当前时间戳的秒数
        System.out.println(instant.getEpochSecond());
        
        //获取当前时间戳的毫秒
        System.out.println(instant.toEpochMilli());
        
        //Date类型转换为Instant
        Instant instant1 = Instant.ofEpochMilli(new Date().getTime());
        System.out.println(instant1);//2020-07-30T03:39:10.798Z
        
        //将字符串转换成Instant
        Instant instant2 = Instant.parse("2020-07-30T03:39:10.798Z");
        System.out.println(instant2); //2020-07-30T03:39:10.798Z
        
        //将Clock转换成Instant
        //Clock.systemUTC() 使用UTC区域中最佳可用系统时钟的时钟,不为空。
        Instant instant3 = Instant.now(Clock.systemUTC());
        System.out.println(instant3);
        
        //加5小时,注意加操作对instant对象本身来说没有影响
        System.out.println(instant.plus(5, ChronoUnit.HOURS)); //2020-07-30T08:45:30.769Z
        System.out.println(instant);//2020-07-30T03:45:30.769Z
        

        Instant ins1 = Instant.parse("2020-07-30T11:52:56.053Z");
        Instant ins2 = Instant.parse("2020-07-30T11:52:46.034Z");
        //时间戳比较
        System.out.println(ins1.isAfter(ins2));
        System.out.println(ins1.isBefore(ins2));

LocalDate

LocalDate是一个不可变的日期时间对象,存储没有时间的日期

		LocalDate localDate = LocalDate.now();
        System.out.println(localDate); //2020-07-30
        //Clock转换成LocalDate
        LocalDate localDate1 = LocalDate.now(Clock.systemDefaultZone());
        System.out.println(localDate1);//2020-07-30
        ////指定年月日的LocalDate
        LocalDate localDate2 = LocalDate.of(2020, 7, 30);
        System.out.println(localDate2);//2020-07-30
        //字符串转换成LocalDate
        LocalDate localDate3 = LocalDate.parse("2020-07-30");
        System.out.println(localDate3);//2020-07-30
        //指定格式化规则的转换
        LocalDate localDate4 = LocalDate.parse("20200729", DateTimeFormatter.ofPattern("yyyyMMdd"));
        System.out.println(localDate4);//2020-07-29
        //2020年的第360天
        LocalDate localDate5 = LocalDate.ofYearDay(2020, 360);
        System.out.println(localDate5);//2020-12-25
        //加5天
        System.out.println(localDate.plusDays(5));//2020-08-04
        System.out.println(localDate.plus(5, ChronoUnit.DAYS));//2020-08-04
        //一周后
        System.out.println(localDate.plusWeeks(1));//2020-08-06
        System.out.println(localDate.plus(1,ChronoUnit.WEEKS));//2020-08-06
        //一月后
        System.out.println(localDate.plusMonths(1));//2020-08-30
        //一年后
        System.out.println(localDate.plusYears(1));//2021-07-30
        //五天前
        System.out.println(localDate.plusDays(-5));//2020-07-25
        System.out.println(localDate.minusDays(5));//2020-07-25
        //6天后是星期几
        System.out.println(localDate.plusDays(6).getDayOfWeek());//WEDNESDAY
        //localDate所代表的日期是当月的第几天
        System.out.println(localDate.getDayOfMonth());//30
        //localDate所代表的日期是今年的第多少天
        System.out.println(localDate.getDayOfYear());//212
        //日期格式化
        System.out.println(localDate.format(DateTimeFormatter.ofPattern("yyyy年MM月dd日")));//2020年07月30日
        //明年是否闰年
        System.out.println(localDate.plusYears(1).isLeapYear());//false
        //今年是否是闰年
        System.out.println(localDate.isLeapYear());//true
        //当月有多少天
        System.out.println(localDate.lengthOfMonth());//31
        //当年有多少天
        System.out.println(localDate.lengthOfYear());//366

LocalTime

LocalTime是一个不可变的日期时间对象,存储没有日期的时间

LocalTime localTime = LocalTime.now();
        System.out.println(localTime);//14:52:33.887
        // 时:分
        System.out.println(LocalTime.of(14,53));//14:53
        //时:分:秒
        System.out.println(LocalTime.of(14,54,45));//14:54:45
        //加两小时
        System.out.println(localTime.plusHours(2));//16:58:45.877

        //LocalTime的很多方法和操作跟LocalDate都是一样的......

LocalDateTime

LocalDateTime是一个不可变的日期时间对象,代表日期时间

		LocalDateTime localDateTime = LocalDateTime.now();
        System.out.println(localDateTime);//2020-07-30T15:02:40.879
        //日期时间格式化
        System.out.println(localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss")));//2020-07-30 03:02:40
        //20天后是星期几
        System.out.println(localDateTime.plusDays(20).getDayOfWeek());//WEDNESDAY
        //20分钟后
        System.out.println(localDateTime.plusMinutes(20).format(DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss")));//2020-07-30 03:24:28

        //LocalDateTime相当于是结合了LocalDate和LocalTime,方法和功能也都是一样的

ZonedDateTime

ZonedDateTime是具有时区的日期时间的不可变表示

		ZonedDateTime zonedDateTime = ZonedDateTime.now();
        System.out.println(zonedDateTime);//2020-07-30T15:05:34.512+08:00[Asia/Shanghai]
        System.out.println();
        //转换成LocalDate
        System.out.println(zonedDateTime.toLocalDate());//2020-07-30
        //转换成LocalDateTime
        System.out.println(zonedDateTime.toLocalDateTime());//2020-07-30T15:08:14.137
        //转换成LocalTime
        System.out.println(zonedDateTime.toLocalTime());//15:08:14.137
        //加3天
        System.out.println(zonedDateTime.plusDays(3));//2020-08-02T15:08:14.137+08:00[Asia/Shanghai]
        //格式化
        System.out.println(zonedDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss")));
        //2020-07-30 03:08:14
        System.out.println(DateTimeFormatter.ofLocalizedTime(FormatStyle.FULL).format(zonedDateTime));          
        // 下午03时33分32秒 CST
        System.out.println(DateTimeFormatter.ofLocalizedTime(FormatStyle.LONG).format(zonedDateTime));          
        // 下午03时33分32秒
        System.out.println(DateTimeFormatter.ofLocalizedTime(FormatStyle.MEDIUM).format(zonedDateTime));        
        // 15:33:32
        System.out.println(DateTimeFormatter.ofLocalizedTime(FormatStyle.SHORT).format(zonedDateTime));         
        // 下午3:33
        System.out.println(DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL).format(zonedDateTime));          
        // 2020年7月30日 星期四
        System.out.println(DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG).format(zonedDateTime));          
        // 2020年7月30日
        System.out.println(DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM).format(zonedDateTime));        
        // 2020-7-30
        System.out.println(DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT).format(zonedDateTime));         
        // 20-7-30
        System.out.println(DateTimeFormatter.ofLocalizedDateTime(FormatStyle.FULL).format(zonedDateTime));      
        // 2020年7月30日 星期四 下午03时33分32秒 CST
        System.out.println(DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG).format(zonedDateTime));      
        // 2020年7月30日 下午03时33分32秒
        System.out.println(DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM).format(zonedDateTime));    
        // 2020-7-30 15:33:32
        System.out.println(DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT).format(zonedDateTime));     
        // 20-7-30 下午3:33
        System.out.println(DateTimeFormatter.ofLocalizedDateTime(FormatStyle.FULL, FormatStyle.MEDIUM).format(zonedDateTime));  
        // 2020年7月30日 星期四 15:33:32

Duration

Duration描述的其实是时长,表示一个时间区间

		Duration duration = Duration.of(10, ChronoUnit.DAYS);
        System.out.println(duration);//PT240H
        //5小时
        System.out.println(Duration.ofHours(5));//PT5H
        //输出小时
        System.out.println(Duration.of(5,ChronoUnit.DAYS).toHours());//120
        //加8小时(10天8小时)
        System.out.println(duration.plusHours(8).toHours());//248
上面就是常用的日期时间类型的使用,基本上日常的使用通过上面的几个类就够用了,其他类型(Month、DayOfWeek、Year、YearMonth、MonthDay、OffsetTime、OffsetDateTime)的用法都是大同小异
©️2020 CSDN 皮肤主题: 数字20 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值