先抄一段廖雪峰大牛 日期时间的解释
在计算机中,我们经常需要处理日期和时间。
这是日期:
2019-11-20
2020-1-1
这是时间:
12:30:59
2020-1-1 20:21:59
日期是指某一天,它不是连续变化的,而是应该被看成离散的。
而时间有两种概念,一种是不带日期的时间,例如,12:30:59。另一种是带日期的时间,例如,2020-1-1 20:21:59,只有这种带日期的时间能唯一确定某个时刻,不带日期的时间是无法确定一个唯一时刻的。
本地时间
当我们说当前时刻是2019年11月20日早上8:15的时候,我们说的实际上是本地时间。在国内就是北京时间。在这个时刻,如果地球上不同地方的人们同时看一眼手表,他们各自的本地时间是不同的:
所以,不同的时区,在同一时刻,本地时间是不同的。全球一共分为24个时区,伦敦所在的时区称为标准时区,其他时区按东/西偏移的小时区分,北京所在的时区是东八区。
从Java 8开始,java.time包提供了新的日期和时间API,主要涉及的类型有:
本地日期和时间:LocalDateTime,LocalDate,LocalTime;
带时区的日期和时间:ZonedDateTime;
时刻:Instant;
时区:ZoneId,ZoneOffset;
时间间隔:Duration。
以及一套新的用于取代SimpleDateFormat的格式化类型DateTimeFormatter。
和旧的API相比,新API严格区分了时刻、本地日期、本地时间和带时区的日期时间,并且,对日期和时间进行运算更加方便。
此外,新API修正了旧API不合理的常量设计:
Month的范围用1~12表示1月到12月;
Week的范围用1~7表示周一到周日。
最后,新API的类型几乎全部是不变类型(和String类似),可以放心使用不必担心被修改。
package com.wying.demo.LocalDateApi;
import org.junit.Test;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.Set;
/**
* description:jdk 1.8 新的日期时间
* 最常用的类是LocalDate,LocalTime和LocalDateTime。
*
* LocalDate 和 LocalTime 和 Instant 一样遵守同样的线程规定――
* 如它们的实例子都是不可变的。通过增加final实现
* LocalDate 和 LocalTime 和 Instant 有同样的计算和比较方法
* (其中有些方法是在 java.time.temporal.Temporal接口中定义的,并且上面这些类都实现了这些方法):
*
* date: 2021/11/16
* author: gaom
* version: 1.0
*/
public class LocalDateDemo01 {
@Test
public void test01() {
/**
* LocalDate表示在ISO格式(yyyy-MM-dd)下的不带具体时间的日期。
* LocalDate.now()返回 yyyy-MM-dd 例2021-11-16 所以要获取时分秒时是不能使用LocalDate
*
*
*
*/
System.out.println("========LocalDate======");
LocalDate localDate = LocalDate.now();
System.out.println("localDate:" + localDate);
System.out.println("localDate.getYear():" + localDate.getYear());
System.out.println("localDate.getMonthValue():" + localDate.getMonthValue());
System.out.println("localDate.getDayOfYear():" + localDate.getDayOfYear());
/**
*与LocalDate类似,可以从系统时钟或使用“parse”和“of”方法创建LocalTime实例
* LocalTime.now()返回 hh24:mm:ss.xxx 例19:47:15.384 需要获取年月日时不能使用LocalDate类似
*/
System.out.println("========LocalTime======");
LocalTime localTime = LocalTime.now();
System.out.println("localTime:" + localTime);
System.out.println("localTime.getHour():" + localTime.getHour());
/**
*LocalDateTime用于表示日期和时间的组合。
*
* 当我们需要结合日期和时间时,这是最常用的类。该类提供了各种API
* LocalDateTime.now() 返回 yyyy-MM-dd hh24:mm:ss.xxx 例2021-11-16T19:50:35.598