日历工具类,计算某年的周一到周日,计算某天是周几

这个Java类库实现了计算全年日期、确定日期是周几、按周组织一年的日期等功能。通过GetDate方法获取指定年份的所有日期,dayForWeek方法计算日期对应的星期,getYearWeek方法将一年的日期按周归类。
摘要由CSDN通过智能技术生成
package com.ly.tool.date;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

/**
 * YearlyDate
 *
 * @author Morningstar
 * @version 1.0
 * 2021/12/31 15:32
 *
 **/
public class YearlyDate {

    /**
     * 计算全年的日期
     * @param year
     * @return
     *
     */
    public static ArrayList<String> GetDate(int year){
        ArrayList<String> dateList = new ArrayList<>();
        for(int mon = 1;mon<13;mon++){
            int month=mon;
            int day=0;
            //第二步:求输入的年份月份与1900年1月1日相隔的总天数
            for (int i = 1900; i < year; i++) {
                if ((i % 4 == 0 && i % 100 != 0)||(i % 400 == 0)) {
                    day+=366;
                }else {
                    day+=365;
                }
            }
            //求相隔月份的天数
            for (int i = 1; i < month; i++) {
                if (i==2) {
                    if ((year%4==0&&year%100!=0)||(year%400==0)) {
                        day+=29;
                    }else {
                        day+=28;
                    }
                }else if (i==4||i==6||i==9||i==11) {
                    day+=30;
                }else {
                    day+=31;
                }
            }
            //第三步:计算上个月最后一天是星期几
            int weeks=day%7;
            int day2=0;
            switch (month) {
                case 2:
                    if (year%4==0&&year%100!=0||year%400==0) {
                        day2+=29;
                    }else {
                        day2+=28;
                    }
                    break;
                case 4:
                case 6:
                case 9:
                case 11:
                    day2=30;
                    break;
                default:
                    day2=31;
                    break;
            }
            //第四部:打印日历
            for (int i = 1; i <= weeks; i++) {

            }
            for (int i = 1; i <= day2; i++) {

                String sdate=year+"-"+mon+"-"+i;
                dateList.add(sdate);
                if ((i+weeks)%7==0) {

                }
            }

        }

        return  dateList;


    }

    /**
     * 计算某一天是周几
     * @param pTime
     * @return
     * 格式为2018-01-01
     * 如果错误就返回0
     */
    public static int dayForWeek(String pTime){

        try {


        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");

        Date tmpDate = format.parse(pTime);

        Calendar cal = Calendar.getInstance();

        // String[] weekDays = { "7", "1", "2", "3", "4", "5", "6" };
        int [] weekDays = {7,1,2,3,4,5,6};

        try {

            cal.setTime(tmpDate);

        } catch (Exception e) {

            e.printStackTrace();

        }

        int w = cal.get(Calendar.DAY_OF_WEEK) - 1; // 指示一个星期中的某天。

        if (w < 0) {
            w = 0;
        }

        return weekDays[w];
        }catch (Exception e){
            e.printStackTrace();
         return 0;
        }

    }

    /**
     * 把一年的周一到周日封装到一个list里面
     * 顶层list里面有7个list,从周一到周日排列
     * @param year
     * @return
     */
    public static List<List<String>> getYearWeek(int year) {
        //获取到某年的所有的日期
        //1900年1月1日相隔的总天数
        ArrayList<String> dateList = GetDate(year);
        ArrayList<String> MondayList = new ArrayList<>();
        ArrayList<String> TuesdayList = new ArrayList<>();
        ArrayList<String> WednesdayList = new ArrayList<>();
        ArrayList<String> ThursdayList = new ArrayList<>();
        ArrayList<String> FridayList = new ArrayList<>();
        ArrayList<String> SaturdayList = new ArrayList<>();
        ArrayList<String> SundayList = new ArrayList<>();
        //判断每天是周几
        dateList.forEach(s -> {
            try {
                int i= dayForWeek(s);
                // System.out.println(s+"周"+CalculationDate.dayForWeek(s));
                if (i==1){
                    MondayList.add(s);
                    return;
                }
                if (i==2){
                    TuesdayList.add(s);
                    return;
                }
                if (i==3){
                    WednesdayList.add(s);
                    return;
                }
                if (i==4){
                    ThursdayList.add(s);
                    return;
                }
                if (i==5){
                    FridayList.add(s);
                    return;
                }
                if (i==6){
                    SaturdayList.add(s);
                    return;
                }
                if (i==7){
                    SundayList.add(s);
                    return;
                }

            } catch (Throwable throwable) {
                throwable.printStackTrace();
            }

        });

        ArrayList<List<String>> lists = new ArrayList<>();
        lists.add(MondayList);
        lists.add(TuesdayList);
        lists.add(WednesdayList);
        lists.add(ThursdayList);
        lists.add(FridayList);
        lists.add(SaturdayList);
        lists.add(SundayList);
        return lists;



    }

    /**
     * 获取两个日期之间的所有日期
     *
     * @param startTime
     *            开始日期  格式2018-01-01
     * @param endTime
     *            结束日期  格式2018-01-01
     * @return
     */
    public static List<String> getDays(String startTime, String endTime) {

        // 返回的日期集合
        List<String> days = new ArrayList<String>();

        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        try {
            Date start = dateFormat.parse(startTime);
            Date end = dateFormat.parse(endTime);

            Calendar tempStart = Calendar.getInstance();
            tempStart.setTime(start);

            Calendar tempEnd = Calendar.getInstance();
            tempEnd.setTime(end);
            tempEnd.add(Calendar.DATE, +1);// 日期加1(包含结束)
            while (tempStart.before(tempEnd)) {
                days.add(dateFormat.format(tempStart.getTime()));
                tempStart.add(Calendar.DAY_OF_YEAR, 1);
            }

        } catch (ParseException e) {
            e.printStackTrace();
        }

        return days;
    }





}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值