zoukankan      html  css  js  c++  java
  • java 8中新的日期和时间API

    java 8中新的日期和时间API

    使用LocalDate和LocalTime

    LocalDate的实例是一个不可变对象,它只提供了简单的日期,并不含当天的时间信息.另外,它也不附带任何与时区相关的信息

    LocalDate实例提供了多种方法来读取常用的值,比如年份,月份,星期几等

    LocalDate date = LocalDate.of(2014,3,18);
    int year = date.getYear();
    Month month = date.getMonth();
    int day = date.getDayOfMonth();
    DayOfWeek dow = date.getDayOfWeek();
    int len = date.lengthOfMonth();
    boolean leap = date.isLeapYear();
    //获取当前的日期
    LocalDate today = LocalDate.now();
    

    你还可以通过传递一个TemporalField参数给get方法拿到童谣给您的信息.

    int year = date.get(ChronoField.YEAR);
    int month = date.get(ChronoField.MONTH_OF_YEAR);
    int day = date.get(ChronoField.DAY_OF_MONTH);
    

    类似的,一天中的时间,比如:13:45:20,可以使用LocalTime类表示

    LocalTime time = LocalTime.of(13,45,20);
    int hour = time.getHour();
    int minute = time.getMinute();
    int second = time.getSecond();
    

    两者都可以通过解析代表他们的字符串创建;

    LocalDate date = LocalDate.parse("2014-03-18");
    LocalTime time = LocalTime.parse("13:45:20");
    

    合并日期和时间

    这个复合类名叫LocalDateTime,是LocalDate和LocalTime的合体.它同时表示了日期和时间,但不带有时区信息

    //2014-03-18T13:45:20
    LocalDateTime dt1 = LocalDateTime.of(2014,Month.MARCH,18,13,45,20);
    LocalDateTime dt2 = LocalDateTime.of(date,time);
    LocalDateTime dt3 = date.atTime(13,45,20);
    LocalDateTime dt4 = date.atTime(time);
    LocalDateTime dt5 = date.atTime(date);
    

    可以从LocalDateTime中提取LocalDate或者LocalTime

    LocalDate date1 = dt1.toLocalDate();
    LocalTime time1 = dt1.toLocalTime();
    

    机器的日期和时间格式

    java.time.Instant类对时间建模的方式,基本上是以Unix元年时间(1970年1月1日午夜时分)开始所经历的秒数进行计算

    Instant instant = Instant.ofEpochSecond(3);//1970-01-01T00:00:03Z
    Instant.ofEpochSecond(3, 1_000_000_000);//1970-01-01T00:00:04Z 第二参数以纳秒为单位的参数值
    

    Duration或Period

    Duration类的静态工厂方法between

     Duration.between(time, time2);
     Duration.between(dateTime1, dateTime2);
     Duration.between(instant1, instant12);
    

    由于LocalDateTime和Instant是为不同的目的而设计的,一个是为了便于人阅读使用,另一个是为了便于机器处理.所以不能将二者混用

    此外,由于Duration类主要用于以秒和纳秒衡量时间的长短,不能仅向between方法传递一个LocalDate对象做参数

    Period类的between,可以使用得到两个LocalDate之间的时长

    Period between = Period.between(LocalDate.of(2014, 3, 8), LocalDate.of(2014, 3, 18));
    

    创建Duration和Period对象

    Duration.ofMillis(3);
    Duration.of(3, ChronoUnit.MINUTES);
    Period.ofDays(10);
    Period.ofWeeks(3);
    Period.of(2, 6, 1);
    

    操纵,解析和格式化日期

    如果已经有一个LocalDate对象,想要创建它的一个修改版,最直接也最简单的方法是使用withAttribute方法.

    LocalDate of = LocalDate.of(2014, 3, 18);
    LocalDate localDate = of.withYear(2011);
    LocalDate localDate1 = localDate.withDayOfMonth(25);//2011-03-25
    localDate1.with(ChronoField.MONTH_OF_YEAR,9);//2011-09-25
    
    
    LocalDate localDate2 = of.plusWeeks(1);//2014-03-25
    LocalDate localDate3 = localDate2.minusYears(3);//2011-03-25
    localDate3.plus(6,ChronoUnit.MONTHS);//2011-09-25
    

    使用TemporalAdjuster

    LocalDate of = LocalDate.of(2014, 3, 18);
    LocalDate with = of.with(nextOrSame(DayOfWeek.SUNDAY));//2014-03-23
    LocalDate with1 = with.with(lastDayOfMonth());//2014-03-31
    
    方法名 描述
    dayOfWeekInMonth 创建一个新的日期,它的值为同一个月中每一周的第几天
    firstDayOfMonth 当月第一天
    firstDayOfNextMonth 下个月第一天
    firstDayOfNextYear 明年的第一天
    firstDayOfYear
    lastDayOfMonth
    lastDayOfNextMonth
    lastDayOfNextYear
    lastDayOfYear
    lastInMonth 它的值为同一个月中,最后一个符合星期几要求的值
    next/previous 将其值设定为日期调整后或者调整前,第一个符合指定星期几要求的日期
    nextOrSame/previousOrSame 将其值设定为日期调整后或者调整前,第一个符合指定星期几要求的日期,如果该日期已经符合要求,直接返回该对象

    打印输出及解析日期-时间对象

    LocalDate of1 = LocalDate.of(2014, 3, 18);
    String format = of1.format(DateTimeFormatter.BASIC_ISO_DATE);//20140318
    String format1 = of1.format(DateTimeFormatter.ISO_LOCAL_DATE);//2014-03-18
    

    可以使用工厂方法parse达到重创改日期对象

    LocalDate parse = LocalDate.parse("20140318", DateTimeFormatter.BASIC_ISO_DATE);//2014-03-18
    LocalDate parse1 = LocalDate.parse("2014-03-18", DateTimeFormatter.ISO_LOCAL_DATE);//2014-03-18
    

    按照摸个模式创建DateTimeFormatter

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
    LocalDate of1 = LocalDate.of(2014, 3, 18);
    String format = of1.format(formatter);
    LocalDate parse = LocalDate.parse(format, formatter);
    
  • 相关阅读:
    根据时间戳获取年月日时分秒
    除法函数,乘法函数,加法函数,减法函数
    禁止鼠标点右键
    获取cookie,设置cookie,删除cookie
    解决 堆栈 出现的父对象和子对象相关联的问题 (深拷贝)
    团队展示
    用户规格说明书——结对编程
    测试与优化——结对编程
    程序开发——结对编程
    程序开发初体验
  • 原文地址:https://www.cnblogs.com/luozhiyun/p/8006777.html
Copyright © 2011-2022 走看看