日期

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
posted @ 2023-02-10 22:10  CyrusHuang  阅读(64)  评论(0)    收藏  举报