构造方法
new Date()
:当前系统日期和时间。
new Date(long)
:给定的日期时间
常用方法
after(Date)
:判断当前日期对象是否在给定日期之后before(Date)
:判断当前日期对象是否在给定日期之前equals(Object)
:判断两日期是否相等compareTo(Date)
:比较两日期前后顺序,如果当前日期对象大于给定日期对象返回 1,小于返回 -1,等于返回 0。对日期类进行格式化和解析,由于该类是个抽象类,所以实例化方式有两种。
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy:MM:dd HH:mm:ss a E");
String s1 = simpleDateFormat.format(date);
// 2025:06:05 10:53:19 上午 周四
字母 | 日期/时间 |
---|---|
y | 年 |
M | 月份 |
d | 日期中的天数 |
E | 星期中的天数 |
H | 小时数(24小时) |
h | 小时数(12小时) |
m | 分钟数 |
s | 秒数 |
a | 上午/下午标记 |
S | 毫秒数 |
常用方法
format(date)
:将 Date 类型格式化(可以自定义格式化模式)成字符串。parse(str)
:将字符串解析成 Date 数据类型(要指定解析的格式,不然会报解析错误)该类是一个抽象类,要通过静态方法 Calendar.getInstance()
来获取子类对象。
Calendar calendar = Calendar.getInstance();
Date time = calendar.getTime();
calendar.setTime(time);
System.out.println(calendar.get(Calendar.HOUR_OF_DAY)); // 24小时
System.out.println(calendar.get(Calendar.DAY_OF_MONTH));
System.out.println(calendar.get(Calendar.DAY_OF_WEEK));
System.out.println(calendar.get(Calendar.DAY_OF_YEAR));
System.out.println(calendar.get(Calendar.MONTH) + 1); //在这个类当中 0 表示 1 月
System.out.println(calendar.get(Calendar.DATE));
System.out.println(calendar.get(Calendar.YEAR));
System.out.println(calendar.get(Calendar.HOUR)); // 12小时
Calendar calendar = Calendar.getInstance();
calendar.set(2000, 12, 6);
格里高利历是公历的标准时间,四年一润,百年不润,四百年一大润
可以用来判断是否是润年
GregorianCalendar gregorianCalendar = new GregorianCalendar();
boolean leapYear = gregorianCalendar.isLeapYear(2024);
常见类
LocalDate:获取本地日期
LocalTime:获取本地时间
LocalDateTime:获取本地日期和时间
初始化
LocalDate localDate = LocalDate.now(); // 获取现在本地的日期 2025-06-05
LocalTime localTime = LocalTime.now(); // 获取现在本地的时间 12:34:50.503098700
// 获取本地而日期时间 2025-06-05T12:35:47.468086200
LocalDateTime localDateTime = LocalDateTime.now();
//指定时间日期 2022-09-02T19:30:12
LocalDateTime localDateTime1 = LocalDateTime.of(2022, 9, 2, 19, 30, 12);
获取具体年月日
int year = localDateTime.getYear();
int month = localDateTime.getMonthValue();
int day = localDateTime.getDayOfMonth();
int dayOfWeek = localDateTime.getDayOfWeek().getValue();
int hour = localDateTime.getHour();
修改日期
LocalDateTime localDateTime = LocalDateTime.now();
//创建一个 localDateTime 副本,并进行修改
LocalDateTime localDateTime2 = localDateTime.withYear(1001);
localDateTime2 = localDateTime.withDayOfMonth(20);
日期偏移(实现几天后,几天前)
LocalDateTime localDateTime = LocalDateTime.now();
//在原用日期的基础上加3天
LocalDateTime localDateTime2 = localDateTime.plusDays(10);
LocalDateTime localDateTime3 = localDateTime.minusDays(10);
LocalDateTime localDateTime4 = localDateTime.plusMonths(1);
获取日期变更子午线的时间点,可以更改时区,实现时间偏移。
//初始为本初子午线的时间
Instant instant = Instant.now();
// 转为毫秒数(时间戳)
long Milli = instant.toEpochMilli();
//获取最大时区时间
Instant max = instant.MAX;
//获取东八区的时间(是个偏移时间对象)
OffsetDateTime offsetDateTime = instant.atOffset(ZoneOffset.of("+8"));
//偏移时间对象转为 LocalDateTime
LocalDate localDate = offsetDateTime.toLocalDate();
//时间戳转为 Instant
Instant instant1 = Instant.ofEpochMilli(System.currentTimeMillis());
指定转换格式,实现 LocalDateTime 与字符串之间的相互转换
//将 LocalDateTime 按规定格式转为字符串
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH时mm分ss秒");
LocalDateTime now = LocalDateTime.now();
String dateTime = formatter.format(now);
//将字符串解析成 LocalDateTime
formatter = DateTimeFormatter.ofPattern("yyyy:MM:dd HH:mm:ss");
String time = "2021:07:09 12:00:00";
LocalDateTime Time = LocalDateTime.parse(time, formatter);
//将时间戳转为 LocalDateTime
long milli = Instant.now().toEpochMilli();
LocalDateTime localDateTime = LocalDateTime
.ofInstant(Instant.ofEpochMilli(milli), ZoneId.systemDefault());
String time = formatter.format(localDateTime);
计算两段日期的间隔
//通过 Period 来实现,可以获得两段时间的相差的年月日(但是不能将这个转换为天数)
LocalDate localDate1 = LocalDate.of(2020, 10, 12);
LocalDate localDate2 = LocalDate.of(2020, 9, 12);
Period period = Period.between(localDate1, localDate2);
System.out.println(period.getYears());
System.out.println(period.getMonths());
System.out.println(period.getDays());
// ChronoUnit 可以获得具体的天数/月份...
long days = ChronoUnit.DAYS.between(localDate1, localDate2);
long months = ChronoUnit.MONTHS.between(localDate1, localDate2);
//手动算,转成纪元的天数再相减
long days2 = localDate1.toEpochDay() - localDate2.toEpochDay();
计算两段日期时间的间隔
LocalDateTime localDateTime1 = LocalDateTime.of(2020, 9, 12, 10, 10, 10);
LocalDateTime localDateTime2 = LocalDateTime.of(2020, 9, 11, 10, 10, 10);
//通过 Duration
Duration duration = Duration.between(localDateTime1, localDateTime2);
long days1 = duration.toDays();
long hours = duration.toHours();
//通过LocalDateTime自带的方法 until
long until = localDateTime1.until(localDateTime2, ChronoUnit.DAYS);
long hours1 = localDateTime1.until(localDateTime2, ChronoUnit.HOURS);
//通过 ChronoUnit
long days = ChronoUnit.DAYS.between(localDateTime1, localDateTime2);
long months = ChronoUnit.MONTHS.between(localDateTime1, localDateTime2);
用来修改日期时间
LocalDate date =LocalDate.now();
//根据 date 获取下周五时间
LocalDate date1 = date.with(TemporalAdjusters.next(DayOfWeek.FRIDAY));
//获取本月的第一天
date1 = date.with(TemporalAdjusters.firstDayOfMonth());
//获取本月的最后一天
date1 = date.with(TemporalAdjusters.lastDayOfMonth());