JDK8 之后的日期,时间
LocalDate, LocalTime, LocalDateTime
它们获取对象方案
public static Xxxx now(): 获取系统当前时间对应的对象
public static Xxx of(…): 获取指定时间的对象
- LocalDate代表 年月日星期
- LocalTime代表 时分秒纳秒
- LocalDateTime代表 月日星期,时分秒纳秒
代替Calendar
它们常用的一些方法(with~, minus~, plus~):
package date_use_new;
import java.time.LocalDate;
public class Test1_LocalDate {
public static void main(String[] args) {
//0,获取本地日期对象(不可变对象)
LocalDate ld = LocalDate.now();//年 月 日
System.out.println(ld);
//1.获取日期对象中的信息
int year = ld.getYear();// 年
int month = ld.getMonthValue();// 月(1——12)
int day = ld.getDayOfMonth();// 日
int dayOfYear = ld.getDayOfYear();// 一年中的第几天
System.out.println(year);
System.out.println(day);
System.out.println(dayOfYear);
//2.直接修改某个信息:withYear,withMonth,withDayOfMonth
LocalDate ld2 = ld.withYear(2099);
LocalDate ld3 = ld.withMonth(12);
System.out.println(ld2);
System.out.println(ld3);
System.out.println(ld);
//3.把某个信息加多少:plusYears,plusMonths,plusDays,plusWeeks
LocalDate ld4 = ld.plusYears(2);
LocalDate ld5 = ld.plusMonths(2);
//4.把某个信息减多少:minusYears,minusMonths,minusDays,minusWeeks
LocalDate ld6 = ld.minusYears(2);
LocalDate ld7 = ld.minusMonths(2);
System.out.println(ld7);
//5.获取指定日期的LocalDate对象:
LocalDate ld8 = LocalDate.of(2099, 12, 12);
LocalDate ld9 = LocalDate.of(2099, 12, 12);
//6.判断两个日期对象是否相等,是在前还是在后:equals,isBefore,isAfter
System.out.println(ld8.equals(ld9));//true
System.out.println(ld8.isAfter(ld));//true
System.out.println(ld8.isBefore(ld));//false
//可以把LocalDateTime转换成LocalDate(年,月,日,星期)和LocalTime(时分秒纳秒)
// public LocalDate toLocalDate()
// public LocalDate toLocalDate()
// public static LocalDateTime of(LocalDate date,LocalTime date)
// -------三者之间方法类似,with~,plus~,minus~-----------
/*
LocalDate ld = ldt.toLocalDate();
LocalDate lt = ldt.toLocalTime();
LocalDateTime ldt10 = LocalDateTime.of(ld,lt)
* */
}
}
ZoneId, ZoneDateTime
ZoneDateTime 带时区时间的常见方法
方法名 | 说明 |
---|---|
public ZoneDateTime withXxx(时间) | 修改时间系列的方法 |
public ZoneDateTime minusXxx(时间) | 减少时间系列的方法 |
public ZoneDateTime plusXxx(时间) | 增加时间系列的方法 |
代替Calendar
它们常用的一些方法:
package date_use_new;
import java.time.Clock;
import java.time.ZoneId;
import java.time.ZonedDateTime;
public class Test4_ZoneId_ZonedDateTime {
public static void main(String[] args) {
// 目标:了解时区和带时区的时间
// 1.ZoneId的常见方法
// public static ZoneId systemDefault(): 获取系统默认的时区
ZoneId zoneId = ZoneId.systemDefault();
System.out.println(zoneId.getId());
System.out.println(zoneId);
//public static Set<String> getAvailableZoneIds(): 获取Java支持的全部时区Id
System.out.println(ZoneId.getAvailableZoneIds());
// public static ZoneId of(String zoneId) : 把某个时区id封装成ZoneId对象
ZoneId zoneId1 = ZoneId.of("America/New_York");
//2. ZoneDateTime: 带时区的时间
// public static ZoneDateTime now ( ZoneId zone) : 获取某个时区的ZoneDateTime对象
ZonedDateTime now = ZonedDateTime.now(zoneId1);
System.out.println(now);
// 世界标准时间
ZonedDateTime now1 = ZonedDateTime.now(Clock.systemUTC());
System.out.println(now1);
// public static ZoneDateTime now() : 获取系统默认时区的ZoneDateTime对象
ZonedDateTime now2 = ZonedDateTime.now();
System.out.println(now2);
}
}
Instant
通过获取Instant的对象,可以拿到此刻时间。
改时间由两部分组成:从1970-01-01 00:00:00开始走到此刻的总秒数 + 不够1秒的纳秒数。
代替Date
它的常用方法:
package date_use_new;
import java.time.Instant;
public class Test5_Instant {
public static void main(String[] args) {
//代替 Date()
// 通过获取Instant的对象,可以拿到此刻时间。
// 改时间由两部分组成:从1970-01-01 00:00:00开始走到此刻的总秒数 + 不够1秒的纳秒数
// 1.创建Instant对象,获取此刻时间信息
Instant now = Instant.now(); // 不可变对
// 2.获取总秒数
long second = now.getEpochSecond();
System.out.println(second);
// 3.不够一秒的纳秒数
int nano = now.getNano();
System.out.println(nano);
System.out.println(now);
Instant instant = now.plusNanos(111);
// Instant 对象的作用,做代码性能分析,或者记录用户操作的时间点
Instant now1 = Instant.now();
// 代码执行。。。。
Instant now2 = Instant.now();
System.out.println(now2);
}
}
DateTimeFormatter
格式化器,用于时间的格式化、解析,是线程安全的。
代替SimpleDateFormat线程不安全
它常用的方法:
package date_use_new;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class Test6_DateTimeFormatter {
public static void main(String[] args) {
//1.创建一个日期时间格式化器对象出来
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");
// 2. 对时间进行格式化
LocalDateTime now = LocalDateTime.now();
System.out.println(now);
String rs = formatter.format(now);// 正向格式化
System.out.println(rs);
// 3. 格式化时间,另一种方法
String rs2 = now.format(formatter);// 反向格式化
System.out.println(rs2);
// 4.解析时间:一般使用LocalDateTime提供的解析方法来解析
String dataStr = "2029年12月12日 12:12:12";
LocalDateTime ldt = LocalDateTime.parse(dataStr, formatter);
System.out.println(ldt);
}
}
Period, Duration
Period: 用于计算两个LocalDate对象 相差的年数、月数、天数。
Duration: 用于计算两个时间对象相差的天数,小时数,分数,秒数,纳秒数;支持LocalTime, LocalDateTime, Instant 等时间。
其他时间补充。
它们常用方法:
package date_use_new;
import java.time.LocalDate;
import java.time.Period;
public class Test7_Period {
public static void main(String[] args) {
// 用于计算两个LocalDate对象 相册的年数、月数、天数
LocalDate start = LocalDate.of(2029, 8, 10);
LocalDate end = LocalDate.of(2029, 12, 15);
// 1.创建Period 对象,封装两个日期对象
Period period = Period.between(start, end);
// 2. 通过period对象获取两个日期对象相差的信息
System.out.println(period.getYears());
System.out.println(period.getMonths());
System.out.println(period.getDays());
}
}
package date_use_new;
import java.time.Duration;
import java.time.LocalDateTime;
public class Test8_Duration {
public static void main(String[] args) {
/*
* 用于计算两个时间对象相差的天数,小时数,分数,秒数,纳秒数;
* 支持LocalTime, LocalDateTime, Instant 等时间
* */
LocalDateTime start = LocalDateTime.of(2025, 11, 11, 11, 10, 10);
LocalDateTime end = LocalDateTime.of(2025, 11, 11, 11, 11, 11);
// 1.得到Duration 对象
Duration duration = Duration.between(start, end);
// 2. 获取两个时间对象间隔的信息
System.out.println(duration.toDays());
System.out.println(duration.toHours());
System.out.println(duration.toMinutes());// 间隔多少分
System.out.println(duration.toSeconds());
System.out.println(duration.toMillis());// 间隔多少毫秒
System.out.println(duration.toNanos());// 间隔多少纳秒
}
}
标签:System,日期,使用,println,now,LocalDate,public,out
From: https://blog.csdn.net/qq_45173172/article/details/142635040