杰瑞科技汇

Java Date如何获取当前日期?

在 Java 中获取当前日期,根据你需要的精度和 API 版本(Java 8+ 推荐使用 java.time),有几种不同的方法。

Java Date如何获取当前日期?-图1
(图片来源网络,侵删)

如何选择?

场景 推荐的 API 示例
Java 8 及以上 (现代 Java) java.time LocalDate.now()
需要包含时间 java.time LocalDateTime.now()
需要包含时区 java.time ZonedDateTime.now()
Java 8 之前 (旧版 Java) java.util new Date()
需要格式化日期 java.time.format DateTimeFormatter

现代 Java 8+ (java.time 包) - 强烈推荐

Java 8 引入了全新的 java.time 包,它解决了旧版 DateCalendar 的诸多问题,是处理日期和时间的标准。

a) 获取当前日期(不含时间): java.time.LocalDate

LocalDate 表示一个不带时间的日期,格式为 yyyy-MM-dd

import java.time.LocalDate;
public class CurrentDateExample {
    public static void main(String[] args) {
        // 获取当前日期
        LocalDate today = LocalDate.now();
        System.out.println("当前日期 (LocalDate): " + today);
        // 输出类似: 当前日期 (LocalDate): 2025-10-27
        // 获取年、月、日
        int year = today.getYear();
        int month = today.getMonthValue(); // getMonth() 返回 Month 枚举
        int day = today.getDayOfMonth();
        System.out.println("年份: " + year);
        System.out.println("月份: " + month);
        System.out.println("日期: " + day);
    }
}

b) 获取当前日期和时间(不含时区): java.time.LocalDateTime

LocalDateTime 表示一个不带时区的日期和时间,格式为 yyyy-MM-ddTHH:mm:ss

import java.time.LocalDateTime;
public class CurrentDateTimeExample {
    public static void main(String[] args) {
        // 获取当前日期和时间
        LocalDateTime now = LocalDateTime.now();
        System.out.println("当前日期时间 (LocalDateTime): " + now);
        // 输出类似: 当前日期时间 (LocalDateTime): 2025-10-27T10:30:55.123
        // 获取年、月、日、时、分、秒
        int hour = now.getHour();
        int minute = now.getMinute();
        int second = now.getSecond();
        System.out.println("小时: " + hour);
        System.out.println("分钟: " + minute);
        System.out.println("秒: " + second);
    }
}

c) 获取当前日期和时间(带时区): java.time.ZonedDateTime

ZonedDateTime 表示一个带时区的完整日期和时间。

import java.time.ZonedDateTime;
public class CurrentZonedDateTimeExample {
    public static void main(String[] args) {
        // 获取当前日期和时间(带系统默认时区)
        ZonedDateTime nowWithZone = ZonedDateTime.now();
        System.out.println("当前日期时间 (带时区): " + nowWithZone);
        // 输出类似: 当前日期时间 (带时区): 2025-10-27T10:30:55.123+08:00[Asia/Shanghai]
        // 获取特定时区的当前时间
        ZonedDateTime nowInNewYork = ZonedDateTime.now(java.time.ZoneId.of("America/New_York"));
        System.out.println("纽约当前时间: " + nowInNewYork);
    }
}

旧版 Java (java.utiljava.text)

如果你在使用 Java 8 之前的版本,或者需要与遗留代码交互,可以使用 java.util.Datejava.util.Calendar

a) java.util.Date (不推荐,但常见)

Date 对象同时包含日期和时间,但其设计有很多缺陷(月份从0开始)。

import java.util.Date;
public class LegacyDateExample {
    public static void main(String[] args) {
        // 创建一个表示当前日期和时间的 Date 对象
        Date now = new Date();
        System.out.println("当前日期时间 (Date): " + now);
        // 输出类似: 当前日期时间 (Date): Fri Oct 27 10:30:55 CST 2025
        // 注意:Date 的月份是从 0 开始的 (0=一月, 1=二月, ...)
        // 所以获取月份时需要 +1
        // 获取年、月、日(这种方式不推荐,因为API已过时)
        // @Deprecated
        int year = now.getYear() + 1900; // getYear() 返回的是自1900年以来的年数
        int month = now.getMonth() + 1;   // 月份从0开始
        int day = now.getDate();
        System.out.println("年份: " + year);
        System.out.println("月份: " + month);
        System.out.println("日期: " + day);
    }
}

b) java.util.Calendar (比 Date 稍好)

CalendarDate 的一个更友好的包装器,但API仍然有些繁琐。

import java.util.Calendar;
public class LegacyCalendarExample {
    public static void main(String[] args) {
        // 获取一个 Calendar 实例,默认使用当前日期和时间
        Calendar calendar = Calendar.getInstance();
        System.out.println("当前日期时间 (Calendar): " + calendar.getTime());
        // 输出类似: 当前日期时间 (Calendar): Fri Oct 27 10:30:55 CST 2025
        // 获取年、月、日
        int year = calendar.get(Calendar.YEAR);
        int month = calendar.get(Calendar.MONTH) + 1; // 月份从0开始
        int day = calendar.get(Calendar.DAY_OF_MONTH);
        System.out.println("年份: " + year);
        System.out.println("月份: " + month);
        System.out.println("日期: " + day);
    }
}

格式化日期

无论是新旧API,通常都需要将日期格式化为特定的字符串。

a) Java 8+ (java.time.format.DateTimeFormatter)

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class DateFormatExample {
    public static void main(String[] args) {
        LocalDate today = LocalDate.now();
        // 定义格式
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日");
        // 格式化日期
        String formattedDate = today.format(formatter);
        System.out.println("格式化后的日期: " + formattedDate);
        // 输出类似: 格式化后的日期: 2025年10月27日
    }
}

b) 旧版 Java (java.text.SimpleDateFormat)

import java.util.Date;
import java.text.SimpleDateFormat;
public class LegacyDateFormatExample {
    public static void main(String[] args) {
        Date now = new Date();
        // 定义格式
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy年MM月dd日");
        // 格式化日期
        String formattedDate = formatter.format(now);
        System.out.println("格式化后的日期: " + formattedDate);
        // 输出类似: 格式化后的日期: 2025年10月27日
    }
}

对于任何新的 Java 项目,强烈建议使用 Java 8 引入的 java.time,它更直观、更安全、功能更强大,并且是未来的标准,只有在维护旧代码或与旧系统交互时,才应考虑使用 java.util.Datejava.util.Calendar

分享:
扫描分享到社交APP
上一篇
下一篇