指定月份获取每周开始和截止时间,不足一周下个月的补足一周,以周六为标准

package com.deta.demo;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
/**
* 指定月份获取每周开始和截止时间,不足一周下个月的补足一周,以周六为标准
* @author Administrator
*
*/
public class a {
private static int year = 2017;// 年
private static int month = 8;// 月
private static int day = 1;// 日 月第一天
private static int startmDay = 1;//
private static int mDay = 0;// 月第一天相应的星期几转成整数
private static int weekDay = 7;// 一周几天
private static String startWeek;// 每周的开始的星期
private static int change = 1;// //【特别说明:例子是以周六为基础;周六前就减去1(五),2(四),3(三),4(二),5(一),周日后就加1】

public static void main(String[] args) {
    /**
     * 系统时间当月天数
     */
    int currentMaxmDays = getCurrentMonthmDay();
    System.out.println("系统时间当月天数:" + currentMaxmDays);
    /**
     * 获取指定月数的天数
     */
    int maxmDaysByDate = getmDaysByYearMonth(year, month);
    System.out.println(year + "年" + month + "月天数:" + maxmDaysByDate);
    /**
     * 获取指定月数第一天是周几
     */
    String week_01 = getmDayOfWeekByDate(year + "-" + month + "-" + day);
    System.out.println(year + "-" + month + "-01是:" + week_01);
    System.out.println(week_01 + "的数字标识是:" + getDay(week_01));
    /**
     * 获取指定月数最后一天是周几
     */
    String week = getmDayOfWeekByDate(year + "-" + month + "-"
            + maxmDaysByDate);
    System.out.println(year + "-" + month + "-" + maxmDaysByDate + "是:"
            + week);
    /**
     * 本月第一周第一天的计算开始星期
     */
    startWeek = getWeek(weekDay - (startmDay % weekDay) - change);
    System.out.println(month + "月第一周第一天是:" + startWeek);

    /**
     * 本月第一周第一天的日期
     * 
     */
    int a = getDay(startWeek) - getDay(week_01);
    a = a + day;
            System.out
            .println(month + "月第一周第一天的日期:" + year + "-" + month + "-" + a);

    /**
     * 开始计算有几周,
     */
    int b = maxmDaysByDate - a;
    int c = b / weekDay;
    int d = b % weekDay;
    /**
     * 打印每周的起止时间
     */
    if (d != 0) {
        c = c + 1;
        System.out.println(month + "月有" + c + "周,余" + d + "天");
    }
    for (int i = 1; i <= c; i++) {
        String title = month + "月第" + i + "周开始和截止日期:";
        if (i == 1) {
            System.out.println(title + year + "-" + month + "-" + a + ";"
                    + year + "-" + month + "-" + (a + weekDay * i - 1));
        } else if (i == c) {
            String startMouth = year + "-" + month + "-"
                    + (a + weekDay * (i - 1));
            int endDay = (a + weekDay * i - 1);
            if (endDay > maxmDaysByDate) {
                month = month + 1;
                endDay = endDay - maxmDaysByDate;
                if (month > 12) {
                    year = year + 1;
                    month = 1;
                }
            }
            String endMouth = +year + "-" + month + "-" + endDay;

            System.out.println(title + startMouth + ";" + endMouth);
        } else {
            System.out.println(title + year + "-" + month + "-"
                    + (a + weekDay * (i - 1)) + ";" + year + "-" + month
                    + "-" + (a + weekDay * i - 1));
        }
    }
}

/**
 * 跟均星期几获取当前值mDay的值
 */
public static int getDay(String week) {
    if (week.equals("星期一")) {
        mDay = 1;
    } else if (week.equals("星期二")) {
        mDay = 2;
    } else if (week.equals("星期三")) {
        mDay = 3;
    } else if (week.equals("星期四")) {
        mDay = 4;
    } else if (week.equals("星期五")) {
        mDay = 5;
    } else if (week.equals("星期六")) {
        mDay = 6;
    } else if (week.equals("星期日")) {
        mDay = 7;
    }

    return mDay;
}

/**
 * 根据startmDay的值获取星期几
 */
public static String getWeek(int mDay) {
    System.out.println(mDay);
    switch (mDay) {
    case 1:
        startWeek = "星期一";
        break;
    case 2:
        startWeek = "星期二";
        break;
    case 3:
        startWeek = "星期三";
        break;
    case 4:
        startWeek = "星期四";
        break;
    case 5:
        startWeek = "星期五";
        break;
    case 6:
        startWeek = "星期六";
        break;
    case 7:
        startWeek = "星期日";
        break;
    default:
        break;
    }

    return startWeek;
}

/**
 * 获取当月的 天数
 * */
public static int getCurrentMonthmDay() {

    Calendar a = Calendar.getInstance();
    a.set(Calendar.DATE, 1);
    a.roll(Calendar.DATE, -1);
    int maxDate = a.get(Calendar.DATE);
    return maxDate;
}

/**
 * 根据年 月 获取对应的月份 天数
 * */
public static int getmDaysByYearMonth(int year, int month) {
    Calendar a = Calendar.getInstance();
    a.set(Calendar.YEAR, year);
    a.set(Calendar.MONTH, month - 1);
    a.set(Calendar.DATE, 1);
    a.roll(Calendar.DATE, -1);
    int maxDate = a.get(Calendar.DATE);
    return maxDate;
}

/**
 * 根据日期 找到对应日期的 星期
 */
public static String getmDayOfWeekByDate(String date) {
    String mDayOfweek = "-1";
    try {
        SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd");
        Date myDate = myFormatter.parse(date);
        SimpleDateFormat formatter = new SimpleDateFormat("E");
        String str = formatter.format(myDate);
        mDayOfweek = str;

    } catch (Exception e) {
        System.out.println("错误!");
    }
    return mDayOfweek;
}

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值