日期
1. java.util.Date(JDK 1.0)
问题:年份从 1900 开始,月份从 0 开始,大部分方法已废弃。
常用方法:
| 方法 | 说明 |
|---|---|
new Date() |
获取当前时间 |
getTime() |
返回毫秒时间戳(自1970-01-01) |
before(Date when) / after(Date when) |
判断时间先后 |
equals(Object obj) |
比较两个时间是否相等,底层是通过 getTime() 获取毫秒数来比较 |
示例:
Date now = new Date();
System.out.println(now); // 输出:Tue Mar 26 14:30:45 CST 2024
System.out.println(now.getTime()); // 时间戳:1711434645000
Date past = new Date(121, 0, 1); // 2021年1月1日(年份=当前-1900,月份0-11)
System.out.println(past.before(now)); // true
// 日期转换为字符串
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String formattedDate = formatter.format(date);
// 字符串转换为日期
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date parsedDate = formatter.parse(dateString);
2. java.util.Calendar(JDK 1.1)
改进:支持时区、日期计算,但 API 仍然难用(月份从 0 开始)。
常用方法:
| 方法 | 说明 |
|---|---|
Calendar.getInstance() |
获取当前时间实例 |
get(int field) |
获取年/月/日等(如 Calendar.YEAR) |
set(int field, int value) |
设置日期字段 |
add(int field, int amount) |
日期加减(如加1天) |
示例:
Calendar cal = Calendar.getInstance();
System.out.println(cal.getTime()); // 当前时间
int year = cal.get(Calendar.YEAR); // 获取月份
int month = cal.get(Calendar.MONTH) + 1; // 获取月份(需+1,月份从 0 开始)
int day = cal.get(Calendar.DAY_OF_MONTH); // 获取当前时间是当月第几天
int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK); // 获取是星期几(从1开始,星期天是1)
int hour = cal.get(Calendar.HOUR_OF_DAY); // 获取小时
int minute = cal.get(Calendar.MINUTE); // 获取分钟
int second = cal.get(Calendar.SECOND); // 获取秒
cal.add(Calendar.DAY_OF_MONTH, 7); // 加7天
System.out.println(cal.getTime()); // 7天后的时间
3. java.time(JDK 8+)
核心类
| 类 | 说明 |
|---|---|
LocalDate |
日期(年-月-日) |
LocalTime |
时间(时:分:秒) |
LocalDateTime |
日期 + 时间 |
ZonedDateTime |
带时区的日期时间 |
Instant |
时间戳(替代 Date) |
DateTimeFormatter |
日期格式化 |
常用方法
(1)LocalDate / LocalTime / LocalDateTime
LocalDate date = LocalDate.now(); // 当前日期
LocalTime time = LocalTime.now(); // 当前时间
LocalDateTime dateTime = LocalDateTime.now(); // 当前日期+时间
int year = date.getYear(); // 获取年(4位)
int month = date.get(ChronoField.MONTH_OF_YEAR); // 获取月份(从1开始)
int day = date.getDayOfMonth(); // 获取今天是几号
// 增加一年
localDate = date.plusYears(1);
localDate = date.plus(1, ChronoUnit.YEARS);
// 减少一个月
localDate = date.minusMonths(1);
localDate = date.minus(1, ChronoUnit.MONTHS);
// 减少一天
localDate = date.minusDays(1);
localDate = date.minus(1, ChronoUnit.DAYS);
// 修改年为 2020
localDate = date.withYear(2020);
localDate = date.with(ChronoField.YEAR, 2020);
LocalDate.now().firstDayOfMonth() // 创建一个新的日期,值为本月的第一天
LocalDate.now().firstDayOfNextMonth() // 创建一个新的日期,值为下月的第一天
LocalDate.now().lastDayOfMonth() // 创建一个新的日期,值为本月的最后一天
LocalDate.now().lastDayOfNextMonth() // 创建一个新的日期,值为下个月的最后一天
(2)ZonedDateTime(时区)
ZonedDateTime nowInTokyo = ZonedDateTime.now(ZoneId.of("Asia/Tokyo"));
System.out.println(nowInTokyo); // 2024-03-26T15:30:45+09:00[Asia/Tokyo]
(3)Instant(时间戳,替代 Date)
Instant now = Instant.now(); // 当前时间戳
System.out.println(now.toEpochMilli()); // 毫秒时间戳
// 与 Date 互转
Date oldDate = Date.from(now); // Instant → Date
Instant newInstant = oldDate.toInstant(); // Date → Instant
(4)DateTimeFormatter(格式化)
// LocalDtaTime 转 String
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
String str1 = LocalDateTime.now().format(dateTimeFormatter);
// String 转 LocalDtaTime
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDate localDate = LocalDate.parse("2019-12-07 07:43:53", dateTimeFormatter);
(5)YearMonth
| 方法 | 说明 |
|---|---|
YearMonth.now() |
当前年月 |
YearMonth.of(int year, int month) |
指定年月 |
getYear() / getMonth() |
获取年份和月份 |
isLeapYear() |
是否闰年 |
atDay(int day) |
转换为 LocalDate(添加具体日) |
plusMonths(long months) / minusMonths(long months) |
月份加减 |
示例
YearMonth current = YearMonth.now(); // 2024-03
YearMonth custom = YearMonth.of(2025, Month.DECEMBER); // 2025-12
System.out.println(current.getYear()); // 2024
System.out.println(current.getMonth()); // MARCH(枚举,无需+1)
System.out.println(current.isLeapYear()); // true(2024是闰年)
// 转换为 LocalDate(添加具体日)
LocalDate date = custom.atDay(1); // 2025-12-01
// 月份计算
YearMonth nextMonth = current.plusMonths(1); // 2024-04

浙公网安备 33010602011771号