Java jdk1.8 之后有用时间类相关记录

Data类(Java.util.Date)

  • 使用的构造器-> 空参 对象值为当前时间格式如下
  • 使用的方法-> .getTime 方法返回值为1970年距今的毫秒数与System.currentTimeMillis()异曲同工之妙
	public static void main(String[] args) {
        Date date = new Date();
        System.out.println(date);
        long time = date.getTime();
        System.out.println(time);
    }
>>> Tue May 19 00:48:01 CST 2020
>>> 1589820481115

Instance

表示时间线上的一个瞬时点。 概念上讲,它只是简单的表示自1970年1月1日0时0分0秒(UTC开始的秒数。)

public void test_2(){
         /*
         *  静态方法now()返回Instant对象(此为UTC时区在本初子午线)
         *  而北京时间处于东八区即比UTC多了八个小时
         * (例如:北京时间在1月1号早上八点的09:00,
         *  则UTC时区下的时间为1月1日的早上01:00)
         */
        Instant instant = Instant.now();
        //设置偏移量
        OffsetDateTime offsetDateTime = instant.atOffset(ZoneOffset.ofHours(8));
        System.out.println(offsetDateTime);

        //把Instant对象转化为时间戳
        long l = instant.toEpochMilli();
        
        //把lang型时间戳转化为Instant对象
        Instant instant1 = Instant.ofEpochMilli(l);
    }

LocalDate、LocalDateTime、LocalTime

  • LocalDateLocalDateTimeocalTime方法大同小异
	public void test_3(){
        //获取本地当前时间
        LocalDate now = LocalDate.now();

        //设置时间
        LocalDate date = LocalDate.of(2020, 5, 20);

        //获取对象此时为本月的第几天
        int dayOfMonth = date.getDayOfMonth();
        System.out.println("本月的第"+dayOfMonth + "天");

        //获取对象此时为本年的第几天
        int dayOfYear = date.getDayOfYear();
        System.out.println("本年的第"+dayOfYear + "天");

        //获取星期几(以枚举类型返回)
        DayOfWeek dayOfWeek = date.getDayOfWeek();
        System.out.println("星期:" + dayOfWeek);
        //修改年、月、日
        System.out.println("针对此对象修改的原时间:" + date);
        //改为对象此年的第几天
        LocalDate date1 = date.withDayOfYear(365);
        System.out.println(date1);
        //改为对象此月份的第几天
        LocalDate date2 = date.withDayOfMonth(8);
        System.out.println(date2);

        //重新设置本对象的年份
        LocalDate date3 = date.withYear(2008);
        System.out.println(date3);
        //重新设置本对象的月份
        LocalDate date4 = date.withMonth(8);
        System.out.println(date4);
    }
    
>>> 本月的第20>>> 本年的第141>>> 星期:WEDNESDAY
>>> 针对此对象修改的原时间:2020-05-20
>>> 2020-12-30
>>> 2020-05-08
>>> 2008-05-20
>>> 2020-08-20
 /*
  * 补充
  * 获取当前对象月份
  * getMonthValue() 
  * 
  * 获得当前对象的小时、分钟、秒
  * getHour()getMinute()getSecond()
  * 
  * 从当前对象加几年、几月、几周、几天、几小时
  * plusYears() plusMouths()  plusWeeks() plusDays()   plusHours() 
  * 
  * 从当前对象减几年、几月、几周、几天、几小时
  * minusYears() minusMonths() minusWeeks() minusDays()  minusHours()  
  */

解析与格式化DataTimeFormatter

 	public void test_4(){

        //ofPattern("yyyy-MM-dd hh:mm:ss")
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-----MM------dd");
        String format = formatter.format(LocalDate.now());
        System.out.println(format);
        
        TemporalAccessor parse = formatter.parse("2000-----09------23");
        System.out.println(parse);
    }

>>> 2020-----05------19
>>> {},ISO resolved to 2000-09-23

//解析字符串 -> 相应的时间类 
  String s = "03-05-2012";
  LocalDate parse_date = LocalDate.parse(s,DateTimeFormatter.ofPattern("MM-dd-yyyy"));
  System.out.println( parse_date);
  
>>> 2012-03-05

带时区的日期时间:ZonedDateTime、ZoneId

	public void test_5(){
        //getAvailableZoneIds():获取所的ZoneId
        Set<String> zoneIds = ZoneId.getAvailableZoneIds();
        for(String s : zoneIds){
            System.out.println(s);
        }
        System.out.println();

        //获取“Asia/Tokyo”时区对应的时间
        LocalDateTime localDateTime = LocalDateTime.now(ZoneId.of("Asia/Tokyo"));
        System.out.println(localDateTime);
    }
    
    public void test_6(){
        //now():获取本时区的ZonedDateTime对象
        ZonedDateTime zonedDateTime = ZonedDateTime.now();
        System.out.println(zonedDateTime);
        //now(ZoneId id):获取指定时区的ZonedDateTime对象
        ZonedDateTime zonedDateTime1 = ZonedDateTime.now(ZoneId.of("Asia/Tokyo"));
        System.out.println(zonedDateTime1);
    }

时间间隔:Duration–用于计算两个“时间”间隔,以秒和纳秒为基准

    public void test_7(){
        LocalTime now = LocalTime.of(8,15,0);
        System.out.println(now);
        LocalTime time = LocalTime.of(20, 20, 0);
        System.out.println(time);
        Duration between_duration = Duration.between(now, time);
        System.out.println(between_duration);

        long toHours = between_duration.toHours();
        long toMillis = between_duration.toMillis();
        long toMinutes = between_duration.toMinutes();

        System.out.println("两者小时间隔:" + toHours);
        System.out.println("两者分钟间隔:" + toMinutes);
        System.out.println("两者秒数间隔:" + toMillis);
    }



>>> 08:15
>>> 20:20
>>> PT12H5M
>>> 两者小时间隔:12
>>> 两者分钟间隔:725
>>> 两者秒数间隔:43500000

日期间隔:Period --用于计算两个“日期”间隔,以年、月、日衡量

    public void test_8(){
        LocalDate localDate = LocalDate.now();
        LocalDate localDate1 = LocalDate.of(2028, 3, 18);

        Period period = Period.between(localDate, localDate1);
        System.out.println("时间间隔:" + period);

        System.out.println("时间间隔年数:" + period.getYears());
        System.out.println("时间间隔月数:" + period.getMonths());
        System.out.println("时间间隔天数:" + period.getDays());

        //返回设置间隔指定的年、月、日数以后的Period对象
        Period period1 = period.withYears(2);
        System.out.println(period1);
    }


>>> 时间间隔:P7Y9M28D
>>> 时间间隔年数:7
>>> 时间间隔月数:9
>>> 时间间隔天数:28
>>> P2Y9M28D

日期时间校正器:TemporalAdjuster

    public void test_9(){
        //获取当前日期的下一个周日是哪天?
        TemporalAdjuster temporalAdjuster = TemporalAdjusters.next(DayOfWeek.SUNDAY);

        LocalDateTime localDateTime = LocalDateTime.now().with(temporalAdjuster);
        System.out.println(localDateTime);

        //获取下一个工作日是哪天?
        LocalDate localDate = LocalDate.now().with(new TemporalAdjuster(){
            @Override
            public Temporal adjustInto(Temporal temporal) {
                LocalDate date = (LocalDate)temporal;
                if(date.getDayOfWeek().equals(DayOfWeek.FRIDAY)){
                    return date.plusDays(3);
                }else if(date.getDayOfWeek().equals(DayOfWeek.SATURDAY)){
                    return date.plusDays(2);
                }else{
                    return date.plusDays(1);
                }
            }
        });
        System.out.println("下一个工作日是:" + localDate);
    }


>>> 2020-05-24T23:02:44.489
>>> 下一个工作日是:2020-05-20

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值