在Java编程中,日期和时间的处理是一个常见的需求。本文将介绍如何将日期字符串转换为日期对象,并从中提取有用的信息,如星期几和一年中的第几天。
问题描述
输入"2015-10-20",输出:"2015年-10月-20日 是 星期二,是2015年的第293天"
解决方案
以下是完整的Java代码实现:
import java.util.Scanner;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import java.time.DayOfWeek;
import java.time.temporal.ChronoField;
public class EnhancedDateConverter {
private static final String[] WEEK_NAMES = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
private static final DateTimeFormatter INPUT_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd");
private static final DateTimeFormatter OUTPUT_FORMATTER = DateTimeFormatter.ofPattern("yyyy年-MM月-dd日");
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("请输入日期(格式: yyyy-MM-dd),输入exit退出:");
String input = sc.nextLine().trim();
if ("exit".equalsIgnoreCase(input)) {
break;
}
try {
LocalDate date = parseDate(input);
String formattedDate = formatDate(date);
String weekDay = getChineseWeekDay(date);
int dayOfYear = getDayOfYear(date);
System.out.printf("%s 是 %s,是%d年的第 %d 天%n",
formattedDate, weekDay, date.getYear(), dayOfYear);
} catch (DateTimeParseException e) {
System.out.println("日期格式不正确,请使用 yyyy-MM-dd 格式");
}
}
sc.close();
}
private static LocalDate parseDate(String dateStr) throws DateTimeParseException {
return LocalDate.parse(dateStr, INPUT_FORMATTER);
}
private static String formatDate(LocalDate date) {
return date.format(OUTPUT_FORMATTER);
}
private static String getChineseWeekDay(LocalDate date) {
DayOfWeek dayOfWeek = date.getDayOfWeek();
return WEEK_NAMES[dayOfWeek.getValue() % 7];
}
private static int getDayOfYear(LocalDate date) {
return date.getDayOfYear();
}
}
使用示例
请输入日期(格式: yyyy-MM-dd),输入exit退出:
2023-05-15
2023年-05月-15日 是 星期一,是2023年的第 135 天
请输入日期(格式: yyyy-MM-dd),输入exit退出:
2020-02-29
2020年-02月-29日 是 星期六,是2020年的第 60 天
请输入日期(格式: yyyy-MM-dd),输入exit退出:
2023-13-01
日期格式不正确,请使用 yyyy-MM-dd 格式
请输入日期(格式: yyyy-MM-dd),输入exit退出:
exit