ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

距离当年1月1日的天数

2021-12-21 12:03:11  阅读:150  来源: 互联网

标签:int 天数 31 30 距离 当年 date Calendar calendar


给你一个格式化日期字符串,让你计算字符串表示的日期距离当年的一月一日有多少天
方法一:

    public int dayOfYear(String date) {
        //难点是一年中的每个月有多少天,好像只有2月不同
        //判断是不是闰年,按照置闰法则:四年一闰,百年不闰,四百年再闰
        String year = date.substring(0, 4);
        int yearInt = Integer.parseInt(year);
        int[][] month = new int[12][2];
        if(yearInt%4 == 0){
            if(yearInt % 100 == 0){
                if(yearInt % 400 == 0){
                    month = new int[][]{{1,31},{2,29},{3,31},{4,30},{5,31},{6,30},{7,31},{8,31},{9,30},{10,31},{11,30},{12,31}};
                }else{
                    month = new int[][]{{1,31},{2,28},{3,31},{4,30},{5,31},{6,30},{7,31},{8,31},{9,30},{10,31},{11,30},{12,31}};
                }
            }else{
                month = new int[][]{{1,31},{2,29},{3,31},{4,30},{5,31},{6,30},{7,31},{8,31},{9,30},{10,31},{11,30},{12,31}};
            }
        }else{
            month = new int[][]{{1,31},{2,28},{3,31},{4,30},{5,31},{6,30},{7,31},{8,31},{9,30},{10,31},{11,30},{12,31}};
        }
        int monthInt = Integer.parseInt(date.substring(5,7));
        int dayInt = Integer.parseInt(date.substring(8,10));
        int res = 0;
        for(int i = 0; i < monthInt-1; i++){
            res += month[i][1];
        }
        res += dayInt;
        return res;
    }

方法二:
使用Calendar、Date、SimpleDateFormat

        //使用Calendar、date、SimpleDateFormat
        //新建一个SimpleDateFormat对象,其日期字符串的格式为"yyyy-MM-dd";
        SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd");
        try {
            //将格式化日期字符串转化成Date对象
            Date date=format.parse("2016-06-12");
            //获得一个Calendar对象并设置时间为date代表的时间
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(date);
            System.out.println(calendar.getTime());
            //获得当前Calendar对象距离1970.1.1 00:00的毫秒数
            long timeInMillis = calendar.getTimeInMillis();
            //将日期设为当年的一月一日
            calendar.set(calendar.get(1),0,1);
            System.out.println(calendar.getTime());
            //直接计算天数
            long days = (timeInMillis - calendar.getTimeInMillis()) / (1000*60*60*24);
            System.out.println(days);
        } catch (ParseException e) {
            e.printStackTrace();
        }

为什么不直接使用Date和SimpleDateFormat呢?
由于Calendar设置时间比Date更加直观和人性化,Calendar类中除了月份是0-11表示的,其他都和我们日常使用一样,Date类中的年起始是1900,月是0-11,日和正常一样,然后设置不像Calendar那么方便。最重要的,Date不是线程安全的。

标签:int,天数,31,30,距离,当年,date,Calendar,calendar
来源: https://www.cnblogs.com/RainASnow/p/15714672.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有