1,time包简介:
- 日期、时间、瞬间和持续时间的主要 API
- 基于 ISO 日历系统,该系统是遵循预测格列高利规则的事实上的世界日历
- 对于包里的类都是不可变并且是线程安全的 > 官网地址:Java API Documentation redirect
2,time包的常用类
- LocalDateTime 日期和时间类:获取和设置时间和日期
- DateTimeFormatter 格式化类:日期和时间的格式化显示
- Instant 瞬时类:获取瞬时时间
3,LocalDateTime 日期和时间类
package preciseTest.moduleTest;
import java.time.LocalDateTime;
public class LocalDateTimeDemo {
public static void main(String[] args) {
//now() - 获取当前系统时间
LocalDateTime time = LocalDateTime.now();
System.out.println("当前系统时间:"+ time); //2023-09-28T15:19:49.595986100
//of() - 设置指定的年,月,日,时,分,秒
LocalDateTime of = LocalDateTime.of(2023, 9, 30, 16, 30, 00, 00);
System.out.println("设置系统时间为:"+ of); //2023-09-30T16:30
//getXxx() - 获取相关的属性
System.out.println("获取当前年份:"+time.getYear()); //2023
System.out.println("获取当前年第几天:"+time.getDayOfYear()); //271天
System.out.println("获取英文当前月份:"+ time.getMonth()); //SEPTEMBER
System.out.println("获取中文当前月份:"+ time.getMonthValue()); //9
System.out.println("获取当前月份第几天:"+ time.getDayOfMonth()); //28天
System.out.println("获取英文这周第几天:"+ time.getDayOfWeek()); //THURSDAY
System.out.println("获取当前小时点:"+ time.getHour()); //15点
System.out.println("获取当前第几分钟:"+ time.getMinute()); //45min
//with() - 设置相关的属性
System.out.println("设置当前年份为:"+ time.withYear(2024)); //2024-09-28T15:47:06.091531200
System.out.println("设置当前月份为:"+ time.withMonth(8)); //2023-08-28T15:47:37.021582500
System.out.println("设置当前小时为:"+ time.withHour(18)); //2023-09-28T18:48:15.329719700
//体现了不可变性
System.out.println("再次打印当前时间:"+ time); //2023-09-28T15:48:58.318757800
//plusXxx() - 属性增加
System.out.println("当前年份增加3:" + time.plusYears(3)); //2026-09-28T15:50:43.600095600
System.out.println("当前月份增加2:" + time.plusMonths(2)); //2023-11-28T15:51:26.654472400
//minusXxx() - 属性减少
System.out.println("当前月份减少4:" +time.minusMonths(4)) ; //2023-05-28T15:53:02.782831600
System.out.println("当前天数减少10:" +time.minusDays(10)) ; //2023-09-18T15:53:38.529898500
}
}
4,DateTimeFormatter 格式化类
package preciseTest.moduleTest;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAccessor;
public class DateTimeFormatterDemo {
public static void main(String[] args) {
//日期时间格式化类
//ofPattern(): 自定义日期格式
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
//format(): 格式化–>日期时间转换成字符串
String str = dateTimeFormatter.format(LocalDateTime.now());
System.out.println("当前系统时间格式化后:" + str); //2023-09-28 16:28:17 周四
//parse(): 解析–>字符串转换成日期时间
TemporalAccessor parse = dateTimeFormatter.parse(str);
System.out.println("日期字符串转换成日期时间:" +parse); //{},ISO resolved to 2023-09-28T16:46:18
TemporalAccessor accessor = dateTimeFormatter.parse("2023-09-21 12:30:50"); //这里的text格式要与上面自定义的格式一致,否则会报错
System.out.println(accessor); //{},ISO resolved to 2023-09-21T12:30:50
}
}
5,Instant 瞬时类
package preciseTest.moduleTest;
import java.time.Instant;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
public class InstantDemo {
public static void main(String[] args) {
//instant类:获取瞬时时间类
//now() - 获取本初子午线对应的标准时间,即英国格林尼治天文时间
Instant now = Instant.now();
System.out.println("获取格林尼治当前时间:"+now); //2023-09-28T08:57:14.353751600Z
//atOffset() - 添加时间的偏移量
OffsetDateTime offsetDateTime = now.atOffset(ZoneOffset.ofHours(8));
System.out.println("东八区时间为:"+ offsetDateTime ); //2023-09-28T16:57:14.353751600+08:00
//toEpochMilli() - 获取自1970年1月1日0时0分0秒(UTC)开始的毫秒数 ,即获取时间戳
long milli = now.toEpochMilli();
System.out.println("获取当前格林尼治时间的毫秒数:"+ milli);
//ofEpochMilli() - 通过给定的毫秒数,获取Instant实例,即获取格林尼治天文时间
Instant instant = Instant.ofEpochMilli(1695891635207L);
System.out.println("通过给定的毫秒数,获取当前格林尼治瞬时时间:"+ instant); //2023-09-28T09:00:35.207Z
}
}