You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用SimpleDateFormat获取指定MM-dd-yyyy格式日期的年中天数?

计算输入日期的年中天数(MM-dd-yyyy格式)

嘿,我来帮你搞定这个问题!你已经写了部分日期解析的代码,接下来只需要几步就能拿到想要的年中天数,我给你两种实现方式——一种适配你正在用的旧API,另一种是更推荐的Java 8+新日期API:


方法一:基于旧API(SimpleDateFormat + Calendar)

你现有的代码已经在做日期解析了,只需要把解析后的Date对象转成Calendar,就能直接获取年中天数,它会自动处理闰年逻辑(比如2008年的2月会按29天计算)。

完整代码示例:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;

public class DayOfYearCalculator {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Please enter a date to view (MM-dd-yyyy):");
        String dateStr = sc.next();
        SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd-yyyy");
        
        try {
            // 解析字符串为Date对象
            Date date = dateFormat.parse(dateStr);
            // 将Date转换为Calendar对象
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(date);
            // 获取年中天数
            int dayOfYear = calendar.get(Calendar.DAY_OF_YEAR);
            System.out.println("该日期是当年的第 " + dayOfYear + " 天");
        } catch (ParseException e) {
            System.out.println("日期格式不正确,请输入MM-dd-yyyy格式的日期");
            e.printStackTrace();
        } finally {
            sc.close();
        }
    }
}

测试输入06-10-2008时,会输出该日期是当年的第 162 天,完全符合你的需求。


方法二:Java 8+ 新日期API(推荐)

如果你的项目用的是Java 8或更高版本,强烈建议使用java.time包下的新API——它线程安全、代码更简洁,不需要处理复杂的Calendar对象:

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Scanner;

public class DayOfYearCalculatorJava8 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Please enter a date to view (MM-dd-yyyy):");
        String dateStr = sc.next();
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM-dd-yyyy");
        
        try {
            // 解析字符串为LocalDate对象
            LocalDate localDate = LocalDate.parse(dateStr, formatter);
            // 直接获取年中天数
            int dayOfYear = localDate.getDayOfYear();
            System.out.println("该日期是当年的第 " + dayOfYear + " 天");
        } catch (Exception e) {
            System.out.println("日期格式不正确,请输入MM-dd-yyyy格式的日期");
            e.printStackTrace();
        } finally {
            sc.close();
        }
    }
}

同样输入06-10-2008,会得到正确的162天结果。新API的代码逻辑更直观,也避免了旧API的线程安全隐患。

内容的提问来源于stack exchange,提问作者user9610177

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:40:03