1.java 8中引入的新的日期和时间API是不可变的,并且线程是安全的。
2.API的设计和易于理解:新的日期时间API以ISO为中心,遵循一致的日期和时间域模型
3.时区的处理:以前开发人员得编写其他逻辑才能使用旧的API处理时区逻辑,而新的API可以使用local和ZonedDate/Time API完成时区的处理
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());
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
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);
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);
ZoneId zoneId = ZoneId.of("Europe/Paris");
Set allZoneIds = ZoneId.getAvailableZoneIds();
ZonedDateTime zonedDateTime = ZonedDateTime.of(localDateTime, zoneId);
(1)该ZonedDateTime提供解析方法来获取时区的特定日期时间:
ZonedDateTime.parse("2015-05-03T10:15:30+01:00[Europe/Paris]")
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);
概念:由一个随机精度整数无标度值和一个32位整数标度组成。如果大于或等于零,则小数位数是小数点右边的位数。如果小于零,则将数字的未缩放值乘以10 ^(-scale)
提供对双精度数的运算,用于算术,小数处理,舍入,比较,格式转换和哈希。
用处:双精度和浮点数是浮点数,他们以小数和指数的二进制表示形式存储,而浮点数在大多数情况下会返回一个带有很小错误的答案(大约10^-19)。
本质就是让获取的小数更精确。