上一篇
如何在Java中输入年月日?
- 后端开发
- 2025-06-17
- 2495
在Java中,使用
Scanner类接收控制台输入的年月日数据,结合
LocalDate或
SimpleDateFormat解析为日期对象,示例代码:,“
java,Scanner sc = new Scanner(System.in);,System.out.print("输入年月日(格式: 2025-12-31): ");,String input = sc.nextLine();,LocalDate date = LocalDate.parse(input); // 使用java.time.LocalDate,`
,或通过SimpleDateFormat
处理自定义格式:,`
java,SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");,Date date = sdf.parse(sc.nextLine());,“
在Java中输入时间(年月日)是常见的编程需求,开发者可通过多种方式实现,以下是详细方法,推荐使用Java 8及以上的现代API(java.time包),兼顾线程安全和易用性。
推荐方案:Java 8的 java.time API(最优选)
Java 8引入了全新的日期时间API(java.time包),解决了旧API的缺陷(如线程不安全、设计混乱),核心类包括:
LocalDate:仅处理年月日(无时间)LocalDateTime:处理年月日+时分秒
输入年月日并创建日期对象
import java.time.LocalDate;
import java.util.Scanner;
public class DateInputExample {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 用户输入年月日
System.out.print("请输入年份:");
int year = scanner.nextInt();
System.out.print("请输入月份(1-12):");
int month = scanner.nextInt();
System.out.print("请输入日期(1-31):");
int day = scanner.nextInt();
// 创建LocalDate对象
LocalDate date = LocalDate.of(year, month, day);
System.out.println("您输入的日期是:" + date); // 格式:YYYY-MM-DD
}
}
关键点:

- 使用
LocalDate.of(year, month, day)直接构建日期对象。 - 自动校验日期合法性(如非规日期抛出
DateTimeException)。 - 输出符合ISO-8601标准(
2025-08-24)。
从字符串解析年月日
String input = "2025-08-24"; // 格式必须为YYYY-MM-DD LocalDate parsedDate = LocalDate.parse(input); System.out.println(parsedDate); // 输出:2025-08-24
自定义格式解析
import java.time.format.DateTimeFormatter;
String input = "2025年08月24日";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日");
LocalDate date = LocalDate.parse(input, formatter);
传统方案(不推荐,仅兼容旧项目)
使用 java.util.Date(已过时)
import java.util.Date;
import java.util.Scanner;
public class LegacyDateExample {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入年份(如2025):");
int year = scanner.nextInt() - 1900; // 年份需减去1900
System.out.print("请输入月份(0-11):");
int month = scanner.nextInt(); // 月份从0开始
System.out.print("请输入日期:");
int day = scanner.nextInt();
Date date = new Date(year, month, day);
System.out.println(date); // 输出:Thu Aug 24 00:00:00 CST 2025
}
}
缺陷:
- 年份计算反直觉(需减1900)。
- 月份从0开始(8月需输入7)。
- 线程不安全,设计过时。
使用 java.util.Calendar
Calendar calendar = Calendar.getInstance(); calendar.set(2025, Calendar.AUGUST, 24); // 月份常量更直观 Date date = calendar.getTime();
注意:月份常量(如Calendar.AUGUST)对应实际月份,但直接写数字时仍需用7表示8月。
常见问题解决方案
-
非规日期处理(如2月30日):

try { LocalDate date = LocalDate.of(2025, 2, 30); } catch (DateTimeException e) { System.out.println("日期无效:" + e.getMessage()); } -
Java 8以下版本如何实现?
- 使用
Calendar(见上)。 - 或引入ThreeTen-Backport库(将
java.time移植到Java 6/7)。
- 使用
-
日期格式要求严格:
- 使用
DateTimeFormatter自定义格式,支持yyyy-MM-dd、dd/MM/yyyy等。
- 使用
总结建议
| 方案 | 适用场景 | 线程安全 | 易用性 |
|---|---|---|---|
java.time |
Java 8+新项目 | ||
Calendar |
旧项目维护 | ||
Date |
不推荐 |
最佳实践:

- 优先使用
LocalDate处理年月日。 - 输入时添加范围提示(如月份1-12)。
- 捕获
DateTimeException避免程序崩溃。
引用说明:本文内容基于Oracle官方Java文档Java SE 8 Date and Time API及实践编码经验。
java.time的设计符合ISO-8601标准,是现代Java开发的行业规范。
