>[success] # java.time
1. `java.time` 是Java8日期类,JDK 1.0中包含了一个`java.util.Date`类,但是它的大多数方法已经在`JDK 1.1引入Calendar类`之后**被弃用**,但是Calendar 类也相对存在一些问题
1.1. 格式化只对Date类有用,对Calendar类则不能使用
1.2. Date类中的年份是从1900开始的,而月份都从0开始 需要去减掉1900
1.3. 非线程安全
>[info] ## java8 日期类型
**Java 8通过发布新的Date-Time API来进一步加强对 日期与时间的处理**。
1. `java.time`包:该包日期/时间API的基础包。
2. `java.time.chrono`包:该包提供对不同日历系统的访问。
3. `java.time.format`包:该包能够格式化和解析日期时间对象。
4. `java.time.temporal`包:该包包含底层框架和扩展特性。
5. `java.time.zone`包:该包支持不同时区以及相关规则的类。
>[danger] ##### LocalDate -- 类
1. `java.time.LocalDate`类主要用于描述年\-月\-日格式的日期信息,该类不表示时间和时区信息
| 方法声明 |功能介绍|
| -- |--|
| static LocalDate now() |在默认时区中从系统时钟获取当前日期|
~~~
public class DateTest {
public static void main(String[] args) {
// 获取当前日期信息并打印
LocalDate ld = LocalDate.now();
System.out.println(ld); // 2022-10-06
}
}
~~~
>[danger] ##### LocalTime -- 类
1. `java.time.LocalTime` 类主要用于描述时间信息,**可以描述时分秒以及纳秒**
|方法声明 |功能介绍|
| -- |--|
|static LocalTime now() |从默认时区的系统时间中获取当前时间|
|static LocalTime now(ZoneId zone) |获取指定时区的当前时间|
~~~
import java.time.LocalTime;
public class DateTest {
public static void main(String[] args) {
// 获取当前时间信息并打印
LocalTime now1 = LocalTime.now();
System.out.println("获取到的当前时间是:" + now1); // 获取到的当前时间是:15:53:25.889174300
}
}
~~~
>[danger] ##### LocalDateTime -- 类
1. `java.time.LocalDateTime`类主要用于描述ISO-8601日历系统中没有时区的日期时间
|方法声明 |功能介绍|
| -- |--|
|static LocalDateTime now()|从默认时区的系统时间中获取当前日期时间|
|static LocalDateTime of(int year, int month, int dayOfMonth, int hour, int minute, int second)|根据参数指定的年月日时分秒信息来设置日期时间|
|int getYear() |获取年份字段的数值|
|int getMonthValue() |获取1到12之间的月份字段|
|int getDayOfMonth()|获取日期字段|
|int getHour() |获取小时数|
|int getMinute() |获取分钟数|
|int getSecond()| 获取秒数|
|LocalDateTime withYear(int year)| 设置为参数指定的年|
|LocalDateTime withMonth(int month) |设置为参数指定的月|
|LocalDateTime withDayOfMonth(int dayOfMonth) |设置为参数指定的日|
|LocalDateTime withHour(int hour) |设置为参数指定的时|
|LocalDateTime withMinute(int minute) |设置为参数指定的分|
|LocalDateTime withSecond(int second) |设置为参数指定的秒|
|LocalDateTime plusYears(long years) |加上参数指定的年|
|LocalDateTime plusMonths(long months) |加上参数指定的月|
|LocalDateTime plusDays(long days) |加上参数指定的日|
|LocalDateTime plusHours(long hours) |加上参数指定的时|
|LocalDateTime plusMinutes(long minutes) |加上参数指定的分|
|LocalDateTime plusSeconds(long seconds) |加上参数指定的秒|
|LocalDateTime minusYears(long years) |减去参数指定的年|
|LocalDateTime minusMonths(long months) |减去参数指定的月|
|LocalDateTime minusDays(long days) |减去参数指定的日|
|LocalDateTime minusHours(long hours) |减去参数指定的时|
|LocalDateTime minusMinutes(long minutes) |减去参数指定的分|
|LocalDateTime minusSeconds(long seconds) |减去参数指定的秒|
~~~
import java.time.LocalDateTime;
public class DateTest {
public static void main(String[] args) {
// 获取当前日期时间信息并打印,使用最多
LocalDateTime now2 = LocalDateTime.now();
System.out.println("获取到的当前日期时间是:" + now2); // 获取到的当前日期时间是:2022-10-06T15:54:13.178964500
// 设置指定年月日时分秒
LocalDateTime of = LocalDateTime.of(2022, 8, 8, 8, 8, 8);
// 自动调用toString方法
System.out.println(of); // 2022-08-08T08:08:08
System.out.println("获取到的年是:" + of.getYear()); // 2022
System.out.println("获取到的月是:" + of.getMonthValue()); // 8
System.out.println("获取到的日是:" + of.getDayOfMonth()); // 8
System.out.println("获取到的时是:" + of.getHour()); // 8
System.out.println("获取到的分是:" + of.getMinute()); // 8
System.out.println("获取到的秒是:" + of.getSecond()); // 8
// ----------------------设置指定年月日 ------------------
LocalDateTime of1 = LocalDateTime.of(2022, 8, 8, 8, 8, 8);
// 调用对象本身的数据内容不会改变(并没有改变of1)。 创建了一个新的对象,由此证明了不可变性
LocalDateTime localDateTime = of1.withYear(2012);
System.out.println("localDateTime = " + localDateTime); // 2012-08-08T20:08:08
System.out.println("of1 = " + of1); // of1 = 2022-08-08T08:08:08
LocalDateTime localDateTime1 = localDateTime.withMonth(12);
System.out.println("localDateTime1 = " + localDateTime1); // localDateTime1 = 2012-12-08T08:08:08
// 日期的加减
LocalDateTime now3 = LocalDateTime.now(); // 2022-10-11T16:14:00.115520
LocalDateTime day5 = now3.plusDays(5);
System.out.println(day5); // 2022-10-11T16:13:14.738725600
LocalDateTime day10 = now3.minusDays(10);
System.out.println(day10); // 2022-09-26T16:14:00.115520
}
}
~~~
>[danger] ##### Instant --- 类
1. `java.time.Instant`类主要用于描述瞬间的时间点信息
|方法声明 |功能介绍|
| -- |--|
|static Instant now()| 从系统时钟上获取当前时间|
|OffsetDateTime atOffset(ZoneOffset offset) |将此瞬间与偏移量组合以创建偏移日期时间|
| static Instant ofEpochMilli(long epochMilli)|根据参数指定的毫秒数来构造对象,参数为距离1970年1月1 日0时0分0秒的毫秒数|
| long toEpochMilli()| 获取距离1970年1月1日0时0分0秒的毫秒数|
~~~
import java.time.Instant;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
public class DateTest {
public static void main(String[] args) {
// 1.使用Instant类来获取当前系统时间 并不是当前系统的默认时区 本初子午线 差8小时 东八区
Instant now = Instant.now();
System.out.println("获取到的当前时间为:" + now); // 获取到的当前时间为:2022-10-06T09:15:47.127236Z
// 2.加上时区所差的8个小时
OffsetDateTime offsetDateTime = now.atOffset(ZoneOffset.ofHours(8));
System.out.println("偏移后的日期时间为:" + offsetDateTime); // 偏移后的日期时间为:2022-10-06T17:15:47.127236+08:00
System.out.println("--------------------------------------------------------");
// 3.获取当前调用对象距离标准基准时间的毫秒数
long g1 = now.toEpochMilli();
System.out.println("获取到的毫秒差为:" + g1); // 获取到的毫秒差为:1665047747127
// 4.根据参数指定的毫秒数来构造对象
Instant instant = Instant.ofEpochMilli(g1);
System.out.println("根据参数指定的毫秒数构造出来的对象为:" + instant); // 偏移后的日期时间为:2022-10-06T17:15:47.127236+08:00
}
}
e
~~~
>[danger] ##### DateTimeFormatter -- 类
1. `java.time.format.DateTimeFormatter`类主要用于格式化和解析日期
|方法声明 |功能介绍|
| -- |--|
|static DateTimeFormatter ofPattern(String pattern) |根据参数指定的模式来获取对象|
|String format(TemporalAccessor temporal) |将参数指定日期时间转换为字符串|
|TemporalAccessor parse(CharSequence text) |将参数指定字符串转换为日期时间|
~~~
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAccessor;
public class DateTest {
public static void main(String[] args) {
// 1.获取当前系统的日期时间并打印
LocalDateTime now = LocalDateTime.now();
System.out.println("now = " + now); // now = 2022-10-06T19:53:47.821575900
// 2.按照指定的格式准备一个DateTimeFormatter类型的对象
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
// 3.实现日期时间向字符串类型的转换并打印
String str = dateTimeFormatter.format(now);
System.out.println("调整格式后的结果是:" + str); // 调整格式后的结果是:2022-10-06 19:53:47
// 4.实现字符串类型到日期时间类型的转换并打印
TemporalAccessor parse = dateTimeFormatter.parse(str);
System.out.println("转回去的结果是:" + parse); // 转回去的结果是:{},ISO resolved to 2022-10-06T19:53:47
}
}
~~~
- windows -- 环境变量
- Vscode -- 编写java
- 初始java
- java -- 关键字
- 编写第一个java程序
- java -- 注释
- 计算机存储 -- 进制
- java -- 类型
- java -- 变量
- 数字类型
- 布尔类型
- 字符类型
- 类型转换
- 双等比较是什么
- java -- 运算符
- 算数运算符
- 字符串拼接
- 关系/比较运算符
- 自增减运算符
- 逻辑运算符
- 三目运算
- 赋值运算符
- 移位运算符
- 位运算符
- 运算符优先级
- java -- 流程控制语句
- if /else if /if -- 判断
- switch case分支结构
- for -- 循环
- 用双重for循环
- while -- 循环
- do while -- 循环
- 案例练习
- java -- 数组
- 数组的存储
- 数组的增删改查
- 数组的特点
- 数组案例
- 二维数组
- 数组的工具方法
- java -- 方法
- java -- 方法的重载
- java -- 方法的调用流程
- java -- 类方法传参注意事项
- java -- 方法练习案例
- 对比 return break continue
- for each循环
- java -- 基础练习
- java -- 面向对象
- java -- 创建类和对象
- java -- 访问控制符
- java -- 类成员方法
- java -- 构造方法
- java -- this
- java -- 封装
- java -- 对象内存图
- java -- 创建对象案例
- java -- static
- java -- 继承
- super -- 关键字
- java -- 构造块和静态代码块
- java -- 重写
- java -- final
- java -- 多态
- java -- 抽象类
- java -- 接口
- 引用类型数据转换
- 综合案例
- java -- 内部类
- java -- 回调模式
- java -- 枚举类型
- java -- switch 使用枚举
- java -- 枚举方法使用
- java -- 枚举类实现接口
- java -- javaBean
- java -- package 包
- java -- import
- java -- 递归练习
- java -- 设计模式
- 单例模式
- java -- 注解
- java -- 元注解
- Java -- 核心类库
- java -- 处理字符串
- Java -- String
- String -- 常用方法
- String -- 正则
- Java -- StringBuilder 和 StringBuffer
- 知识点
- Java -- StringJoiner 字符串拼接
- 练习题
- 字符串的总结
- Java -- 包装类
- Integer
- Double
- Boolean
- Character
- java -- 集合类
- java -- util.Collection
- Iterator接口
- java -- util.List
- java -- ArrayList
- java -- util.Queue
- java -- util.Set
- java -- util.Map
- java -- util.Collections
- Java -- Math
- Java -- java.lang
- Java -- Object
- Java -- 获取当前时间戳
- Java -- 异常
- Java -- java.util
- java -- Date
- java -- Calender
- Java -- java.text
- Java -- SimpleDateFormat
- Java -- java.time
- Java -- java.io
- java -- io.File
- java -- 泛型
- IDEA -- 用法