• 廖雪峰Java7处理日期和时间-3java.time的API-1LocalDateTime


    1.java.time提供了新的日期和时间API:

    • LocalDate/LocalTime/LocalDateTime
    • ZoneDateTime/ZoneId
    • Instant
    • Formatter

    新API特点:

    • 严格区分日期、时间
    • 所有的类均为不变类(类似String)
    • 修复了Month范围1-12(Jan~Dec)
    • Week范围1-7(Mon~Sun)

    2.LocalDate/LocalTime/LocalDateTime

    • LocalDate:本地日期
    • LocalTime:本地时间
    • LocalDateTime:本地日期+时间
        public static void main(String[] args) {
            //获取当前日期时间
            LocalDate d = LocalDate.now();//获取当前日期
            LocalTime t = LocalTime.now();//当去当前时间
            LocalDateTime dt = LocalDateTime.now();//获取当前日期和时间
            //Local严格按照ISO 8601格式打印
            System.out.println(d+"	"+t+"	"+dt);
    
            //指定日期时间
            LocalDate d2 = LocalDate.of(2016,11,30);//构造LocalDate对象,月份不再减1,即11是11月,不是12月
            LocalTime t2 = LocalTime.of(15,16,17);//构造LocalTime对象
            LocalDateTime dt2 = LocalDateTime.of(2016,11,30,15,16,17);//构造LocalDateTime对象
            LocalDateTime dt3 = LocalDateTime.of(d2,t2);//根据LocalDate和LocalTime对象构造LocalDateTime对象
            System.out.println(d2+"	"+t2+"		"+dt2);
        }
    

    2.1DateTimeFormatter是不可变类

        public static void main(String[] args) {
            DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
            System.out.println(dtf.format(LocalDateTime.now()));
            System.out.println(LocalDateTime.now().format(dtf));
    
            LocalDateTime dt2 = LocalDateTime.parse("2019-04-11 19:27:18",dtf);
            System.out.println(dt2);
        }
    

    3.parse将字符串解析为日期时间

    默认是按照ISO标准格式进行解析的。如果传入的标准格式的日期、时间,可以自动解析。

    • yyyy-MM-dd
    • HH:mm:ss
    • HH:mm:ss:SSS
    • yyyy-MM-dd'T'HH:mm:ss
    • yyyy-MM-dd'T'HH:mm:ss.SSS
        public static void main(String[] args) {
            LocalDate d1 = LocalDate.parse("2001-05-06");
            System.out.println(d1);
            LocalTime t1 = LocalTime.parse("15:16:17");
            System.out.println(t1);
            LocalTime t2 = LocalTime.parse("15:16:17.99");
            System.out.println(t2);
            LocalDateTime dt1 = LocalDateTime.parse("2016-11-30T15:16:17");
            System.out.println(dt1);
            LocalDateTime dt2 = LocalDateTime.parse("2016-11-30T15:16:17.333");
            System.out.println(dt2);
        }
    

    4.日期和时间运算

    4.1对日期和时间进行加减

    • plusDays()
    • minusHours()
    • plusWeeks()
        public static void main(String[] args) {
            LocalDate today = LocalDate.now();
            LocalDate after5days = today.plusDays(5);//加5天
            System.out.println(today+"	"+after5days);
    
            LocalTime now = LocalTime.now();
            LocalTime before2hours = now.minusHours(2);//减2小时
            System.out.println(now+"	"+before2hours);
    
            LocalDate d = today.plusYears(1).plusMonths(1).plusWeeks(1).plusDays(1);//1年1月1周又1天后
            System.out.println(today+"	"+d);
        }
    

    4.2使用with调整日期时间

    • withDayOfMonth()
    • withMonth()
    • withHours()
    • with()
            LocalDate firstday = LocalDate.now().withDayOfMonth(1);//本月第一天
            System.out.println(firstday);
            LocalTime at = LocalTime.now().withSecond(0).withNano(0);//将秒和纳秒调整为0
            System.out.println(at);
            LocalDate lastday = LocalDate.now().with(TemporalAdjusters.lastDayOfMonth());//本月最后1天
            System.out.println(lastday);
            LocalDate firstSunday = LocalDate.now().with(TemporalAdjusters.firstInMonth(DayOfWeek.SUNDAY));//本月第一个周日
            System.out.println(firstday);
        }
    
    ### 4.3判断日期和时间先后 * isBefore() * isAfter() * equals()
        public static void main(String[] args) {
            LocalDate d1 = LocalDate.of(2016,11,20);
            LocalDate d2 = LocalDate.of(2016,11,21);
            System.out.println(d1.isBefore(d2));
            System.out.println(d1.isAfter(d2));
            System.out.println(d1.equals(d2));
        }
    

    4.4Period计算2个时期相差多少

    • getYears()
    • getMonths()
    • getDays()
        public static void main(String[] args) {
            LocalDate d1 = LocalDate.of(2016,11,20);
            LocalDate d2 = LocalDate.of(2050,1,1);
            Period p = d1.until(d2);
            System.out.println(p);//P33Y1M12D ,即相差33年1月12天
            System.out.println("年"+p.getYears()+"月"+p.getMonths()+"日"+p.getDays());
            System.out.println((d2.toEpochDay()-d1.toEpochDay())+"天");
        }
    

    示例:
    代码1:

        public static void main(String[] args) {
            LocalDate d1 = LocalDate.now();
            System.out.println(d1);
            System.out.println("week="+d1.getDayOfWeek().getValue());//打印周几
            LocalDate d2 = LocalDate.of(2016,11,30);
            LocalTime t2 = LocalTime.of(15,16,17);
            LocalDateTime dt2 = LocalDateTime.of(d2,t2);
            System.out.println(dt2);
        }
    

    5.总结:

    LocalDate、LocalTime和LocalDateTime:

    • 不变类(类似String)
    • 默认按ISO 8601标准格式化和解析
    • 使用DateTimeFormatter自定义格式化和解析
    • 使用plusDays()/minusHours()等方法对日期和时间进行加减、返回新对象
    • 使用withDayOfMonth()/with()等方法调整日期和时间,返回新对象
    • 使用isBefore()/isAfter()/equals()判断日期和时间的先后

    注意:LocalDateTime无法与long进行转换:

    • 因为LocalDateTime没有时区,无法确定某一时刻
    • ZonedDateTime有时区,可以与long进行转换
  • 相关阅读:
    String和stringbuffer
    项目中Orcale存储过程优化记录
    大数据项目中的Oracle查询优化
    洛谷P3402 可持久化并查集
    Gym
    CodeForces
    Gym
    Gym
    UVA
    Kattis
  • 原文地址:https://www.cnblogs.com/csj2018/p/10691739.html
Copyright © 2020-2023  润新知