Java日期处理:将字符串转换为日期并获取星期和年天数

19 阅读2分钟

在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