尚学堂之Jdk8学习笔记。学习视频链接(B站): https://www.bilibili.com/video/av68043832/?p=18
LocalDate、LocalTime、LocalDateTime
LocalDate、LocalTime、LocalDateTime 类的实例是不可变的对象(final修饰),分别表示使用 ISO-8601日历系统的日期、时间、日期和时间。它们提供了简单的日期或时间,并不包含当前的时间信
息。也不包含与时区相关的信息。
注:ISO-8601日历系统是国际标准化组织制定的现代公民的日期和时间的表示法
方法列表
代码演示
/**
* LocalDate
*/
@Test
public void test1() {
//获取当前时间
LocalDate now = LocalDate.now();
System.out.println(now);
//2019-10-02
//设定时间
LocalDate date = LocalDate.of(1997, 2, 10);
System.out.println(date);
//1997-02-10
}
/**
* LocalDateTime
*/
@Test
public void test2() {
//获取当前时间
LocalDateTime now = LocalDateTime.now();
System.out.println(now);
//2019-10-02T11:28:42.648
//设定时间
LocalDateTime dateTime = LocalDateTime.of(1997, 2, 10, 5, 30, 0);
System.out.println(dateTime);
//1997-02-10T05:30
//获取时间的某一属性
int year = dateTime.getYear();//获取年
System.out.println(year);
//1997
int dayOfMonth = dateTime.getDayOfMonth();//获取天
System.out.println(dayOfMonth);
//10
//时间的运算
LocalDateTime newTime = dateTime.plusHours(3);
System.out.println(newTime);
//1997-02-10T08:30
}
Instant 时间戳
用于“时间戳”的运算。它是以Unix元年(传统的设定为UTC时区1970年1月1日午夜时分)开始
所经历的描述进行运算
代码演示
@Test
public void test3() {
//获取当前时间
Instant now = Instant.now();
System.out.println(now);
//2019-10-02T03:31:21.685Z
//获取毫秒值
long milli = now.toEpochMilli();
System.out.println(milli);
//1569987081685
}
Duration 和 Period
- Duration:用于计算两个“时间”间隔
- Period:用于计算两个“日期”间隔
代码演示
@Test
public void test4() throws InterruptedException {
//Duration 计算两个时间的间隔
Instant now = Instant.now();
Thread.sleep(5);
Instant now2 = Instant.now();
Duration between = Duration.between(now, now2);
long millis = between.toMillis(); //转换为秒
System.out.println(millis);
//5
LocalDate of = LocalDate.of(1997, 3, 4);
LocalDate date = LocalDate.now();
Period period = Period.between(of, date);
int years = period.getYears();
int months = period.getMonths();
int days = period.getDays();
System.out.println(years+"年"+months+"月"+days+"天");
//22年6月28天
}
日期的操纵
- TemporalAdjuster : 时间校正器。有时我们可能需要获 取例如:将日期调整到“下个周日”等操作。
- TemporalAdjusters : 该类通过静态方法提供了大量的常 用 TemporalAdjuster 的实现。
代码演示
@Test
public void test5() {
//下周一
LocalDateTime now = LocalDateTime.now();
System.out.println("当前时间:"+now+",今天是"+now.getDayOfWeek());
//当前时间:2019-10-02T15:11:40.253,今天是WEDNESDAY
LocalDateTime time = now.with(TemporalAdjusters.next(DayOfWeek.MONDAY));
System.out.println(time);
//2019-10-07T15:11:40.253
}
解析与格式化
java.time.format.DateTimeFormatter ,该类提供了三种格式化方法:
- 预定义的标准格式
- 语言环境相关的格式
- 自定义的格式
注意:与传统的SimpleDateFormat相比,DateTimeFormatter 是线程安全的。
代码演示
@Test
public void test6() {
LocalDateTime now = LocalDateTime.now();
//预定义的标准格式
DateTimeFormatter formatter = DateTimeFormatter.ISO_DATE_TIME;
String iso_formatter = formatter.format(now);
System.out.println("预定义--->"+iso_formatter);
//预定义--->2019-10-02T15:53:34.464
//自定义格式
DateTimeFormatter dtm = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");
String format = dtm.format(now);
System.out.println("自定义--->"+format);
//自定义--->2019-10-02 03:53:34
}
时区的处理
Java8 中加入了对时区的支持,带时区的时间为分别为:ZonedDate、ZonedTime、ZonedDateTime
其中每个时区都对应着 ID,地区ID都为 “{区域}/{城市}”的格式。例如 :Asia/Shanghai 等
ZoneId:该类中包含了所有的时区信息
getAvailableZoneIds() : 可以获取所有时区时区信息
of(id) : 用指定的时区信息获取 ZoneId 对象