Java 8 Date/Time API

java 8 时间和日期

与之前的区别:

1.java 8中引入的新的日期和时间API是不可变的,并且线程是安全的。
2.API的设计和易于理解:新的日期时间API以ISO为中心,遵循一致的日期和时间域模型
3.时区的处理:以前开发人员得编写其他逻辑才能使用旧的API处理时区逻辑,而新的API可以使用local和ZonedDate/Time API完成时区的处理

三个常用类:LocalDate,LocalTime,LocaDateTime

一:LocalDate

1.LocalDate:表示在ISO格式(YYYY-MM-DD),而不显示时间的日期。
创建当前日期:LocalDate  localDate = LocalDate.now();
2.可以用“of”方法或者"parse"方法来获取表示特定日期,月份和年份的LocalDate。
                   例如:LocalDate.of(2015,02,20);
               LocalDate.parse("2015-02-20");
3.LOCALDATE提供各种实用方法,以获得各种信息。
(1)获取当前的本地日期并添加一天:
例:LocalDate tomorrow = LocalDate.now().plusDays(1);
(2)取当前日期并减去一个月。接受枚举作为时间单位:
例:LocalDate previousMonthSameDay = LocalDate.now().minus(1, ChronoUnit.MONTHS);
(3)分别获取星期几和每月几号
例: DayOfWeek sunday = LocalDate.parse("2016-06-12").getDayOfWeek();
         int twelve = LocalDate.parse("2016-06-12").getDayOfMonth();
(4)可以从给定日期获得日期边界
例:LocalDateTime   beginningOfDay = LocalDate.parse("2016-06-12").atStartOfDay();
        LocalDate    firstDayOfMonth = LocalDate.parse("2016-06-12").with(TemporalAdjusters.firstDayOfMonth());

二:LocalTime

1可以从系统时钟或使用“ parse”和“ of”方法创建LocalTime实例
例:LocalTime now = LocalTime.now();          //获取当前本地时间
       LocalTime sixThirty = LocalTime.parse("06:30");
       LocalTime sixThirty = LocalTime.of(6, 30);
2.常用方法:
      (1)通过解析字符串创建LocalTime,并使用“ plus” API向其添加一个小时
  例:LocalTime sevenThirty = LocalTime.parse("06:30").plus(1, ChronoUnit.HOURS);
      (2)提供了多种获取方法,可用于获取特定的时间单位,例如小时,分钟和秒
例:int six = LocalTime.parse("06:30").getHour();
       (3)一天的最大,最小和中午时间可以通过LocalTime类中的常量获得
例:LocalTime maxTime = LocalTime.MAX

三:LocalDateTime

1.创建当前时间和日期
        LocalDateTime.now();
2.“ of”和“ parse”方法创建实例
例:LocalDateTime.of(2015, Month.FEBRUARY, 20, 06, 30);
        LocalDateTime.parse("2015-02-20T06:30:00");
3.有实用程序API支持特定时间单位的加减
 例:localDateTime.plusDays(1);
         localDateTime.plusDays(1);
4.Getter方法可用于提取类似于日期和时间类的特定单位
例:localDateTime.getMonth();

日期和时间格式

1.ISO日期格式来格式化本地日期
   String localDateString = localDateTime.format(DateTimeFormatter.ISO_DATE);
2.该DateTimeFormatter提供多种标准格式选项。还可以提供自定义模式来格式化方法
例:localDateTime.format(DateTimeFormatter.ofPattern("yyyy/MM/dd"));
3.作为格式化选项的一部分,我们可以采用SHORT,LONG或MEDIUM格式输入。
   localDateTime.format(DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM)).withLocale(Locale.UK);

使用期限与持续时间

**( Duration用于计算两个时间(LocalTime) 之间的时间间隔)
**(Period 用于计算两个日期(LocalDate)之间的时间间隔)

一:工作周期(被广泛地用于修改给定的日期的值或以获得两个日期之间的差值)

1.例:LocalDate initialDate = LocalDate.parse("2007-05-10");
        LocalDate finalDate = initialDate.plus(Period.ofDays(5));
2.该周期类有各种getter方法,如getYears,getMonths和getDays从获取值周期对象
        int five = Period.between(initialDate, finalDate).getDays();
3.该时期可以在特定的单元获得两个日期之间的如天或月或数年,使用ChronoUnit.between:	
  	       long five = ChronoUnit.DAYS.between(initialDate, finalDate);

二:与工作时间(类似时期,该Duration类是使用应对时间。)

1.创建一个本地时间上午6:30,然后加30秒的持续时间,以使本地时间上午6点30分30秒的:
       LocalTime initialTime = LocalTime.of(6, 30, 0);
       LocalTime finalTime = initialTime.plus(Duration.ofSeconds(30));
2.两个瞬间之间的持续时间可以作为持续时间或特定单位获得。在第一个代码段中,我们使用Duration类的Between ()方法
     来查找finalTime和initialTime之间的时间差,并以秒为单位返回该差:
    (1)   long thirty = Duration.between(initialTime, finalTime).getSeconds();
     使用ChronoUnit类的between()方法执行相同的操作:
     (2)long thirty = ChronoUnit.SECONDS.between(initialTime, finalTime);

ZoneDateTime API(时区)

一: 1.首先,为巴黎创建一个区域

   ZoneId zoneId = ZoneId.of("Europe/Paris");
2.然后,可以获得所有区域ID的集合
   Set allZoneIds = ZoneId.getAvailableZoneIds();
3.可以把LocalDateTime转化为特定的区域中 3.可以把LocalDateTime转化为特定的区域中
   ZonedDateTime zonedDateTime = ZonedDateTime.of(localDateTime, zoneId);
   (1)该ZonedDateTime提供解析方法来获取时区的特定日期时间:
   ZonedDateTime.parse("2015-05-03T10:15:30+01:00[Europe/Paris]")

二:使用时区的另一种方法是使用OffsetDateTime

1.该OffSetDateTime实例可以如下使用创建ZoneOffset
   LocalDateTime localDateTime = LocalDateTime.of(2015, Month.FEBRUARY, 20, 06, 30);
2.然后,通过创建ZoneOffset并为localDateTime实例进行设置,将时间增加了两个小时
   ZoneOffset offset = ZoneOffset.of("+02:00");
   OffsetDateTime offSetByTwo = OffsetDateTime.of(localDateTime, offset);

BigDecimal类

概念:由一个随机精度整数无标度值和一个32位整数标度组成。如果大于或等于零,则小数位数是小数点右边的位数。如果小于零,则将数字的未缩放值乘以10 ^(-scale)
提供对双精度数的运算,用于算术,小数处理,舍入,比较,格式转换和哈希。
用处:双精度和浮点数是浮点数,他们以小数和指数的二进制表示形式存储,而浮点数在大多数情况下会返回一个带有很小错误的答案(大约10^-19)。
本质就是让获取的小数更精确。

iso-8601

国际上公认的使用数字表示日期和时间的方式。YYYY-MM-DD
完整标准涵盖了编写方式:
  • 日期
  • 一天中的时间
  • 世界标准时间(UTC)
  • 本地时间与UTC偏移
  • 日期和时间
  • 时间间隔
  • 重复时间间隔

你可能感兴趣的:(java)