• Java 8 新特性之新的日期时间库


    ​ 介绍Java8新的日期时间库用法。由于Java之前旧的日期时间类太难用,所以Java8重新开发了新的日历时间库java.time。主要包含LocalDate本地日期类、LocalTime本地时间类、LocalDateTime日期时间类、ZonedDateTime带时区的日期时间类、Clock系统闹钟类、Instant类等。

    常见用法

    ​ 由于用法非常简单,直接上代码了,就只添加简单的注释,不作过多说明了(能用代码说明的就尽量不用注释)。

    获取本地日期

    LocalDate today = LocalDate.now();
    System.out.println(today);//输出当前日期,比如2018-03-13
    

    vs旧版本

    String today = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
    

    显然新的库使用更加简洁。

    转换日期格式

    有时候我们并不想要输出yyyy-MM-dd的格式,而是想要输出其他格式,比如yyyy/MM/dd格式
    这个时候可以使用DateTimeFormatter类来转换格式。

    LocalDate today = LocalDate.now();
    System.out.println("LocalDate now is:" + today.format(DateTimeFormatter.ofPattern("yyyy/MM/dd")));//输出2018/03/13
    

    分别获取年、月、日

    int year = today.getYear();
    int month = today.getMonthValue();
    int day = today.getDayOfMonth();
    System.out.printf("Year: %d Month: %d Day: %d
    ",year,month,day);
    //输出Year: 2018 Month: 03 Day: 13
    

    而以前还需要使用Calendar类来帮忙,繁琐且可读性差。

    返回指定的某个日期

    LocalDate specifiedDate = LocalDate.of(2018,3,13);
    System.out.println("指定日期:" + specifiedDate);//输出2018-03-13
    

    返回当前月份共有几天

    int lengthOfMonth = today.lengthOfMonth();
    System.out.printf("该月有%d天
    ",lengthOfMonth);//根据月份输出,比如31
    

    获取星期几

    DayOfWeek dayOfWeek = today.getDayOfWeek();
    System.out.println(dayOfWeek);//输出MONDAY、TUESDAY、WEDNESDAY...
    

    比较两个日期

    LocalDate today2 = LocalDate.of(2018,3,12);
    if(today.equals(today2)){
        System.out.println("today equals today2");
    }
    if(today.isBefore(today2)){
        System.out.println(today + "早于" + today2);
    }
    if(today2.isAfter(today)){
        System.out.println(today + "晚于" + today2);
    }
    

    日期计算

    LocalDate tomorrow = today.plusDays(1);
    LocalDate preWeekDate = today.minusWeeks(1);
    LocalDate nextMonthDate = today.plusMonths(1);
    System.out.println("明天日期:" + tomorrow);
    System.out.println("上一周日期:" + preWeekDate);
    System.out.println("下个月日期:" + nextMonthDate);
    

    日期、时间计算:往前就minusXXX、往后就plusXXX

    获取当前时间

    //默认格式HH:mm:ss.nnn 带毫秒
    LocalTime time = LocalTime.now().withNano(0); //将毫秒取值0
    System.out.println("LocalTime now is:" + time);
    

    我们一般使用只需要到秒的话,就使用withNano(0)方法将毫秒取值0,即可输出HH:mm:ss格式。同理,其他还有withHour()、withMinute()、withSecond()方法用来直接修改时、分、秒。

    获取当前日期时间

    //默认格式yyyy-MM-dd HH:mm:SS.nnn 可使用DateTimeFormatter转换格式
    LocalDateTime dateTime = LocalDateTime.now();
    System.out.println("转换后的日期时间格式:" + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:SS")));
    

    返回指定的某个时间

    LocalTime specifiedTime = LocalTime.of(15,40,30);
    System.out.println("指定时间:" + specifiedTime);//输出15:40:30
    

    带时区的完整时间

    ZonedDateTime zdt = ZonedDateTime.now();
    System.out.println(zdt);//输出2018-03-13T14:36:11.425+08:00[Asia/Shanghai]
    

    获取时间戳

    Instant timestamp = Instant.now();
    System.out.println(timestamp);//输出2018-03-13T06:36:11.425Z
    long currentTimeMillis = Clock.systemUTC().millis();
    System.out.println(currentTimeMillis);//输出1520922971426,相当于System.currentTimeMillis()方法
    

    总结

    比较常用的方法就这些了,后续有遇到新的问题再补充。建议大家在新的项目中最好就用新的日期时间库中的类,会方便很多。而对于那些历史遗留项目,就只能继续入坑了,除非你改用JDK 1.8的。

  • 相关阅读:
    AOP入门之静态代理
    C# 6 与 .NET Core 1.0 高级编程
    C# 6 与 .NET Core 1.0 高级编程
    C# 6 与 .NET Core 1.0 高级编程
    C# 6 与 .NET Core 1.0 高级编程
    C# 6 与 .NET Core 1.0 高级编程
    C# 6 与 .NET Core 1.0 高级编程
    C# 6 与 .NET Core 1.0 高级编程
    C# 6 与 .NET Core 1.0 高级编程
    C# 6 与 .NET Core 1.0 高级编程
  • 原文地址:https://www.cnblogs.com/universal/p/10415492.html
Copyright © 2020-2023  润新知