新时间日期API
(1)、java.time包构成
java.time:包含值对象的基础包
java.time.chrono:提供对不同的日历系统的访问
java.time.format:格式化和解析时间和日期
java.time.temporal:包括底层框架和扩展特性
java.time.zone:包含时区支持的类
(2)、java.time 本地日期时间类
LocalDate:表示使用 ISO-8601日历系统的日期,没有时区信息
LocalTime:代表的是不含日期的时间,没有时区信息
LocalDateTime:它包含了日期及时间,没有时区信息
相关方法:
@Test
public void Test01(){
LocalDate localDate = LocalDate.now();
boolean leapYear = localDate.isLeapYear();
System.out.println("今年是不是闰年:"+leapYear);
boolean after = localDate.isAfter(localDate.plusMonths(-1));//两个日期是否相邻
System.out.println(after);
LocalTime localTime = LocalTime.now();
LocalDateTime localDateTime = localTime.atDate(localDate);
LocalDateTime localDateTime1 = LocalDateTime.now();
DayOfWeek dayOfWeek = localDateTime1.getDayOfWeek();//今天是周几
System.out.println(dayOfWeek);
}
@Test
public void Test01(){
LocalDate localDate = LocalDate.now();
boolean leapYear = localDate.isLeapYear();
System.out.println("今年是不是闰年:"+leapYear);
boolean after = localDate.isAfter(localDate.plusMonths(-1));//两个日期是否相邻
System.out.println(after);
LocalTime localTime = LocalTime.now();
LocalDateTime localDateTime = localTime.atDate(localDate);
LocalDateTime localDateTime1 = LocalDateTime.now();
DayOfWeek dayOfWeek = localDateTime1.getDayOfWeek();//今天是周几
System.out.println(dayOfWeek);
}
(2)、Instant:时间戳
@Test
public void Test02(){
Instant instant = Instant.now();//获取的是当前的美国时间,和处于东八区的我们相差八个小时
System.out.println(instant);//2019-04-23T11:39:14.174Z
System.out.println(instant.getEpochSecond());//把获取到的当前时间的描述换算成秒
System.out.println(instant.toEpochMilli());//毫秒
System.out.println(instant.getNano());//纳秒
}
(3)、Duration和Period
Duration:用于计算两个“时间”间隔
Period:用于计算两个“日期”间隔
@Test
public void Test07(){
LocalDateTime local1 = LocalDateTime.now();
System.out.println(local1);//2019-04-23T21:16:08.502
LocalDateTime local2 = local1.with(TemporalAdjusters.dayOfWeekInMonth(5, DayOfWeek.MONDAY));
System.out.println(local2);//2019-04-29T21:16:08.502
Duration between = Duration.between(local1, local2);
System.out.println(between);//PT144H
System.out.println(between.toDays());//6
Period between1 = Period.between(local1.toLocalDate(), local2.toLocalDate());
System.out.println(between1);//P6D
}
(4)、日期的操纵
TemporalAdjuster : 时间校正器。有时我们可能需要获取例如:将日期调整到“下个周日”等操作。
TemporalAdjusters : 该类通过静态方法提供了大量的常用TemporalAdjuster的实现。
@Test
public void Test06(){
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDateTime);//2019-04-23T21:07:36.209
LocalDateTime with = localDateTime.with(TemporalAdjusters.firstDayOfMonth());
System.out.println(with);//2019-04-23T21:07:36.209
}
(5)、解析与格式化
java.time.format.DateTimeFormatter类:该类提供了三种格式化方法:
预定义的标准格式
语言环境相关的格式
自定义的格式
@Test
public void Test03() {
//直接使用常量创建DateTimeFormatter格式器
DateTimeFormatter Style0 = DateTimeFormatter.ISO_ZONED_DATE_TIME;//2019-04-23T20:53:01.697+08:00[Asia/Shanghai]
DateTimeFormatter Style1 = DateTimeFormatter.ISO_DATE_TIME;//2019-04-23T20:49:11.928
//使用本地化的不同风格来创建DateTimeFormatter格式器
DateTimeFormatter Style2 = DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL);//2019年4月23日 星期二
DateTimeFormatter Style3 = DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG);//2019年4月23日
//根据模式字符串来创建DateTimeFormatter格式器
DateTimeFormatter Style4 = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");//2019年04月23日 20:51:13
LocalDateTime localDateTime = LocalDateTime.now();
ZonedDateTime zonedDateTime = ZonedDateTime.now();
System.out.println(zonedDateTime.format(Style0));
System.out.println(localDateTime.format(Style1));
System.out.println(localDateTime.format(Style2));
System.out.println(localDateTime.format(Style3));
System.out.println(localDateTime.format(Style4));
}
@Test
public void Test04(){
ZonedDateTime zonedDateTime = ZonedDateTime.now();
ZoneId zone = zonedDateTime.getZone();
System.out.println(zone);//Asia/Shanghai
for (String s : ZoneId.getAvailableZoneIds()) {
System.out.println(s);//获取所有的时区信息
}
ZoneId pacific = ZoneId.of("US/Pacific");
ZonedDateTime now = ZonedDateTime.now(pacific);
System.out.println(now);//2019-04-23T05:57:56.398-07:00[US/Pacific]
}
(6)、时区的处理
Java8 中加入了对时区的支持,带时区的时间为分别为:ZonedDate、ZonedTime、ZonedDateTime其中每个时区都对应着 ID,地区ID都为 “{区域}/{城市}”的格式
例如 :Asia/Shanghai 等
ZoneId:该类中包含了所有的时区信息
getAvailableZoneIds() : 可以获取所有时区时区信息
of(id) : 用指定的时区信息获取 ZoneId 对象与传统日期处理的转换
(7)、与传统日期处理的转换
@Test
public void Test05(){
Date date = new Date();
Instant instant = date.toInstant();
System.out.println(instant);//2019-04-23T13:01:54.752Z
Date from = Date.from(instant);
System.out.println(from);//Tue Apr 23 21:01:54 CST 2019
}