首页 > 解决方案 > 一种将天数转换为日期的方法

问题描述

向用户请求一个介于 1 和 365 之间的数字。数字代表一年中的天数。显示相应的日期。

我卡在方法calculationDateWithDayNumber

例如:数字 105 应转换为日期 4 月 15 日。我的结果是 2 月 -31 日。它哪里出错了?

public class DateOperations {
    
    private final static String[] MONTHS = {"January", "February", "March", "April", "May", "June", "July", "August", 
            "September", "October", "November", "December"  };
    
    private static final int[] NUMBERDAYS = {31,28,31,30,31,30,31,31,30,31,30,31};
    
    public static String calculationDateWithDayNumber(int day)
    {
        int month = 0;
        for (int i=0; day>=NUMBERDAYS[i] ;i++)  
            {day=-NUMBERDAYS[i];
            ++ month;}
             
            String nameMonth = MONTHS[month];

             
            
        String datum = String.format("%d%s",day, nameMonth);
        
        return datum;
    }

}

标签: javaarraysdate

解决方案


您可以使用 java.time API 轻松完成此操作,使用ofYearDay. 既然你说数字可以从 1 到 365,你可能假设一个非闰年,所以你可以传递任何非闰年作为第一个参数:

public static String getMonthDayFromDayOfYear(int dayOfYear) {
    // 2019 is a non-leap year
    LocalDate date = LocalDate.ofYearDay(2019, dayOfYear);

    // "ddMMMM" seems to be your desired format
    return DateTimeFormatter.ofPattern("ddMMMM").withLocale(Locale.US).format(date);
}

推荐阅读