3644一年中的第几天

Posted 小雷FansUnion

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3644一年中的第几天相关的知识,希望对你有一定的参考价值。

给你一个字符串 date ,按 YYYY-MM-DD 格式表示一个 现行公元纪年法 日期。请你计算并返回该日期是当年的第几天。

通常情况下,我们认为 1 月 1 日是每年的第 1 天,1 月 2 日是每年的第 2 天,依此类推。每个月的天数与现行公元纪年法(格里高利历)一致。

示例 1:

输入:date = "2019-01-09"
输出:9
示例 2:

输入:date = "2019-02-10"
输出:41
示例 3:

输入:date = "2003-03-01"
输出:60
示例 4:

输入:date = "2004-03-01"
输出:61
 

提示:

date.length == 10
date[4] == date[7] == '-',其他的 date[i] 都是数字
date 表示的范围从 1900 年 1 月 1 日至 2019 年 12 月 31 日
通过次数45,123提交次数69,577

来源:力扣(LeetCode)
链接:力扣
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

public class DayOfTheYear

    /**

     * jdk自带的Calendar实现

     * @param date

     * @return

     */

    public int getDay(Date date)

        if (date == null)

            return 0;

        

        Calendar cal = Calendar.getInstance();

        cal.setTime(date);

        return cal.get(Calendar.DAY_OF_YEAR);

    

     

    /**

     * 人工计算,月份-天数的数组和闰年

     * @param date "2021-01-01"输入格式比较严格

     * @return

     */

    public int dayOfYear(String date)

        int year=Integer.parseInt(date.subSequence(04)+"");

        int month=Integer.parseInt(date.subSequence(57)+"");

        int day=Integer.parseInt(date.subSequence(810)+"");

        //闰年分为普通闰年和世纪闰年,其判断方法为:公历年份是4的倍数,且不是100的倍数,为普通闰年。

        //公历年份是整百数,且必须是400的倍数才是世纪闰年。

        //归结起来就是通常说的:四年一闰;百年不闰,四百年再闰。

        //闰年是为了弥补因人为历法规定造成的年度天数与地球实际公转周期的时间差而设立的。

        boolean isRunNian = (year%4==0 && year%100!=0) || (year%400==0);

        //第0,占位,清晰点

        int[] monthDay =new int [] 0,31,28,31,30,31,30,31,31,30,31,30,31;

        if(isRunNian)

            monthDay[2]=29;

        

        int theDay =0;

        for(int currentMonth=1;currentMonth<month;currentMonth++)

            theDay+= monthDay[currentMonth];

        

        theDay+= day;

        return theDay;

    

public class DayOfTheYearTest

    @Test

    public void test()

        DayOfTheYear year = new DayOfTheYear();

        final String day1 = "2021-01-01";

        final String day365 = "2021-12-31";

        final String day366 = "2004-12-31";

        final String day366of2 = "2000-12-31";

        Assert.assertEquals(year.getDay(parseDateYmd(day1)),1);

        Assert.assertEquals(year.getDay(parseDateYmd(day365)),365);

        Assert.assertEquals(year.getDay(parseDateYmd(day366)),366);

        Assert.assertEquals(year.getDay(parseDateYmd(day366of2)),366);

         

        Assert.assertEquals(year.dayOfYear(day1),1);

        Assert.assertEquals(year.dayOfYear(day365),365);

        Assert.assertEquals(year.dayOfYear(day366),366);

        Assert.assertEquals(year.dayOfYear(day366of2),366);

    

     

    public static Date parseDateYmd(String dateStr)

        return getDateFromStr(dateStr, "yyyy-MM-dd");

    

     

    public static Date getDateFromStr(String dateStr, String dateFormat)

        Date date = null;

        SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);

        try 

            date = sdf.parse(dateStr);

         catch (ParseException e)

        

        return date;

    

以上是关于3644一年中的第几天的主要内容,如果未能解决你的问题,请参考以下文章

Python|Leetcode《1154》|一年中的第几天

(编程题)输入年份,月份,日期,输出这是一年中的第几天

335一年中的第几天

Python_每日习题_0004_一年中的第几天

用JavaScript, 判断输入的日期是一年中的第几天。

一年中的第几天 哔哩哔哩2020校园招聘笔试题讲解