美文网首页
java8提供的时间工具类

java8提供的时间工具类

作者: 赵仝 | 来源:发表于2017-03-20 18:04 被阅读0次

    java8之前,我对于java提供的时间工具类,觉得很麻烦。因此我偏向使用appache或者google提供的一些工具包。但java8,为我们重新提供时间工具类。这次所提供的类都在Time包中,而这其中最值得的我们去了解的类有五个。

    • Instant 它代表的是时间戳,比如2014-01-14T02:20:13.592Z,这可以从java.time.Clock类中获取,像这样:
      Instant current = Clock.system(ZoneId.of(“Asia/Tokyo”)).instant();
    • LocalDate 它表示的是不带时间的日期,比如2014-01-14。它可以用来存储生日,周年纪念日,入职日期等。
    • LocalTime – 它表示的是不带日期的时间
    • LocalDateTime – 它包含了时间与日期,不过没有带时区的偏移量
    • ZonedDateTime – 这是一个带时区的完整时间,它根据UTC/格林威治时间来进行时区调整

    注:这次新的日期和时间工具类都不可变的也是线程安全的。
    代码就是最好的文档,具体使用如下

            // 获取当前日期
            LocalDate ld = LocalDate.now();
            System.out.println(ld);
            // 输出结果:2017-03-20
    
            // 获取当前的年月日
            int year = ld.getYear();
            int month = ld.getMonthValue();
            int day = ld.getDayOfMonth();
            System.out.println("年:" + year + "月:" + month + "日:" + day);
            // 输出结果:年:2017月:3日:20
    
            // 获取指定日期
            LocalDate lcl = LocalDate.of(2020, 2, 5);
            System.out.println(lcl);
            // 输出结果:2020-02-05 ,这比我们自己拼接字符串可太爽了^_^
    
            // 获取指定时间,具体到毫秒
            LocalDateTime lct = LocalDateTime.now();
            System.out.println(lct);
            // 输出结果:2017-03-20T15:38:32.264
    
            // 指定具体时间
            LocalDateTime lct1 = LocalDateTime.of(1998, 3, 4, 14, 33);
            System.out.println(lct1);
            // 输出结果:1998-03-04T14:33
    
            // 判断两个日期是否相等
            LocalDate lld1 = LocalDate.now();
            LocalDate lld2 = LocalDate.of(2017, 3, 20);
            if (lld1.equals(lld2)) {
                System.out.println("日期相等");
            }
            // 输出结果:日期相等
    
            // 判断是不是生日,比如以我的生日举例声明
            LocalDate ldt = LocalDate.of(1994, 10, 07);
            LocalDate ldt1 = LocalDate.of(2020, 10, 07);
            MonthDay md = MonthDay.of(ldt.getMonth(), ldt.getDayOfMonth());
            MonthDay md1 = MonthDay.of(ldt1.getMonth(), ldt1.getDayOfMonth());
            if (md.equals(md1)) {
                System.out.println("zhaotong 生日快乐");
            }
            // 输出结果:zhaotong 生日快乐
    
            // 从当前时间,向前或向后扩展
            LocalDate lde = LocalDate.now();
            LocalDate lde1 = lde.plusDays(5);// 向后数五天
            System.out.println(lde1);// 2017-03-25
            LocalDate lde2 = lde.minusDays(5);// 向前数五天
            System.out.println(lde2);// 2017-03-15
            LocalDate lde3 = lde.minusWeeks(2);// 向前数两周
            System.out.println(lde3);// 2017-03-06
            // LocalDateTime 也拥有这些扩展函数,这里就不在一一说明了
    
            // java 8中的时钟
            Clock clock = Clock.systemUTC();
            Clock clock1 = Clock.systemDefaultZone();
            System.out.println(clock);
            System.out.println(clock1);
    
            // 输出结果:SystemClock[Z],SystemClock[Asia/Shanghai]
    
            // 判断一个日期是在另一个日期前面还是后面
    
            LocalDate today = LocalDate.now();
            LocalDate tomorrow = LocalDate.of(2017, 3, 21);
            if (today.isBefore(tomorrow)) {
                System.out.println(true);
            }
            if (tomorrow.isAfter(today)) {
                System.out.println(true);
            }
    
            // java8 中处理不同的时区
            LocalDateTime ldtc = LocalDateTime.now();
            ZonedDateTime ldtczone = ZonedDateTime.of(ldtc,
                    ZoneId.of("America/New_York"));
            System.out.println(ldtczone);
            // 输出:2017-03-20T17:35:56.257-04:00[America/New_York]
    
            // java中如何表示固定的日期
            YearMonth ym = YearMonth.of(2008, Month.FEBRUARY);
            System.out.println(ym.lengthOfMonth());// 2008年的2月是29天
    
            // 判断是否为闰年
            LocalDate date = LocalDate.now();
            if (date.isLeapYear()) {
                System.out.println(date + ":" + "是闰年");
            }
    
            // 获取两个日期之间的数据
            LocalDate date1 = LocalDate.of(2000, 10, 07);
            Period per = Period.between(date1, date);
            System.out.println("days:" + per.getDays());
            System.out.println("years:" + per.getYears());
            System.out.println("months:" + per.getMonths());
            // days:13
            // years:16
            // months:5
            // 相差16年,5个月,13天
    
            // java 8获取当前时间戳
            Instant is = Instant.now();
            System.out.println(is);
            // 输出:2017-03-20T09:53:59.433Z
    
            // 格式化输出日期
            String goodFriday = "1994-10-07";
    
            try {
    
                DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
                LocalDate holiday = LocalDate.parse(goodFriday, formatter);
                System.out.println(holiday);
            } catch (DateTimeParseException ex) {
                ex.printStackTrace();
    
            }
            
            //将日期格式化,转化成字符串
            
            LocalDateTime ldtt=LocalDateTime.now();
            DateTimeFormatter format=DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:a");
            String str=ldtt.format(format);
            System.out.println(str);
            //输出结果:2017-03-20 06:03:下午
    

    相关文章

      网友评论

          本文标题:java8提供的时间工具类

          本文链接:https://www.haomeiwen.com/subject/scybnttx.html