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);
    
  • 相关阅读:
    每日一水 POJ8道水题
    编译和使用 MySQL C++ Connector
    j2ee model1模型完成分页逻辑的实现 详解!
    DB查询分析器访问EXCEL时,要在表名前后加上中括弧或双引号
    指向结构体变量的指针
    EOSS V3.0 企业运营支撑系统(基于RBAC原理的权限管理)
    MybatisGen1.0 Mybatis JavaBean Mapper生成工具
    The table name must be enclosed in double quotation marks or sqare bracket while accessing EXCEL by
    资源-Android:Android
    软件-开发软件:Android Studio
  • 原文地址:https://www.cnblogs.com/luozhiyun/p/8006777.html
Copyright © 2011-2022 走看看