Java8之新时间日期API
程序员文章站
2022-05-05 08:56:03
...
1.LocalDate、LocalTime、LocalDateTime
LocalDate、LocalTime、LocalDateTime类的实例是不可变的对象,分别表示使用ISO-8601日历系统的日期、时间、日期和时间。它们提供了简单的日期或时间,并不包含当前的时间信息,也不包含与时区相关的信息。
2.Instant时间戳
3.Duration和Period
Duration:用于计算两个“时间”间隔
Period:用于计算两个“日期”间隔
4.日期的操纵
TemporalAdjuster:时间校正器,比如将时间调整到“下个周日”
TemporalAdjusters:该类通过静态方法提供了大量的常用TemporalAdjuster的实现
5.解析与格式化
Java.time.format.DateTimeFormatter类——该类提供了三种格式化方法
预定义的标准格式
语言环境相关的格式
自定义的格式
6.时区的处理
Java8中加入了对时区的支持,带时区的时间分别为:ZonedDate、ZonedTime、ZonedDateTime,其中每个时区都对应着ID,地区ID都为“{区域}/{城市}”的格式。
ZoneId:该类中包含了所有的时区信息
getAvailableZoneIds():可以获取所有时区信息
of(id):用指定的时区信息获取ZoneId对象
package com.alisa.java8.time;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAdjusters;
import java.util.Set;
@RunWith(SpringRunner.class)
@SpringBootTest
public class LocalDateTimeTest {
//1、LocalDate、LocalTime、LocalDateTime
@Test
public void test1(){
LocalDateTime ldt1 = LocalDateTime.now();
System.out.println(ldt1);
LocalDateTime ldt2 = LocalDateTime.of(2019,8,18,21,49,40);
System.out.println(ldt2);
LocalDateTime ldt3 = ldt2.plusYears(2);
System.out.println(ldt3);
LocalDateTime ldt4 = ldt2.minusMonths(2);
System.out.println(ldt4);
System.out.println(ldt1.getYear());
System.out.println(ldt1.getMonthValue());
System.out.println(ldt1.getDayOfMonth());
System.out.println(ldt1.getHour());
System.out.println(ldt1.getMinute());
System.out.println(ldt1.getSecond());
}
//2、Instant:时间戳
@Test
public void test2(){
Instant ins1 = Instant.now();
System.out.println(ins1.toEpochMilli());
OffsetDateTime odt = ins1.atOffset(ZoneOffset.ofHours(8));
System.out.println(odt);
Instant ins2 = Instant.ofEpochSecond(5);
System.out.println(ins2);
}
//3、Duration:用于计算两个“时间”间隔
// Period:用于计算两个“日期”间隔
@Test
public void test3(){
Instant ins1 = Instant.now();
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
}
Instant ins2 = Instant.now();
System.out.println("耗费时间为:"+ Duration.between(ins1,ins2));
System.out.println("============================");
LocalDate ld1 = LocalDate.now();
LocalDate ld2 = LocalDate.of(2018,8,18);
Period pe = Period.between(ld2,ld1);
System.out.println(pe.getYears());
System.out.println(pe.getMonths());
System.out.println(pe.getDays());
}
//4、TemporalAdjuster:时间校正器
@Test
public void test4(){
LocalDateTime ldt1 = LocalDateTime.now();
System.out.println(ldt1);
LocalDateTime ldt2 = ldt1.withDayOfMonth(10);
System.out.println(ldt2);
LocalDateTime ldt3 = ldt1.with(TemporalAdjusters.next(DayOfWeek.SUNDAY));
System.out.println(ldt3);
//自定义下一个工作日
LocalDateTime ldt4 = ldt1.with((time) -> {
LocalDateTime ldt5 = (LocalDateTime) time;
DayOfWeek dow = ldt5.getDayOfWeek();
if(dow.equals(DayOfWeek.FRIDAY)){
return ldt5.plusDays(3);
}else if(dow.equals(DayOfWeek.SATURDAY)){
return ldt5.plusDays(2);
}else{
return ldt5.plusDays(1);
}
});
System.out.println(ldt4);
}
//5、DateTimeFormatter:解析和格式化日期或时间
@Test
public void test5(){
DateTimeFormatter dtf1 = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");
LocalDateTime ldt1 = LocalDateTime.now();
System.out.println(ldt1.format(dtf1));
}
//6、ZonedDate、ZonedTime、ZonedDateTime:带时区的时间或日期
@Test
public void test6(){
//获取所有时区
Set<String> set = ZoneId.getAvailableZoneIds();
//set.forEach(System.out::println);
LocalDateTime ldt1 = LocalDateTime.now(ZoneId.of("Asia/Shanghai"));
System.out.println(ldt1);
ZonedDateTime zdt = ZonedDateTime.now(ZoneId.of("US/Pacific"));
System.out.println(zdt);
}
}
上一篇: Java8之方法引用与构造器引用
下一篇: Java8之Lambda表达式
推荐阅读
-
Java8新特性之JavaFX 8_动力节点Java学院整理
-
Java8新特性之Base64详解_动力节点Java学院整理
-
Java8新特性之泛型的目标类型推断_动力节点Java学院整理
-
Java8新特性之StampedLock_动力节点Java学院整理
-
Java8新特性之lambda的作用_动力节点Java学院整理
-
Java8新特性之再见Permgen_动力节点Java学院整理
-
Java8新特性之精简的JRE详解_动力节点Java学院整理
-
Java8新特性之深入解析日期和时间_动力节点Java学院整理
-
Java8新特性之lambda(动力节点Java学院整理)
-
Java编程时间日期API实例解析