java实现两个日期内具有几个星期几的计算

虽然java自带的Calendar类似乎很好用,但是作为小白的我还不会用。朋友说有时需要计算任意两个日期内具有几个星期一或者星期三。问我能不能实现,我想想,能实现,可能代码不够优雅。具体代码放在下面。欢迎朋友与我分享更好的思路或工具吧~

package cn.example.mapper;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class DateUtil {
    public static void main(String[] args) {
        try {
            System.out.println("有" + getMondayNumber("2017-02-03","2017-02-16",5) + "个");
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }

    /**
     * 查询日期间有几天一周中的某一天
     * 日期格式 yyyy-MM-dd yyyy-MM-dd 1-7(表示周一到周日)
     * @param startDay 准备查询的起始日期
     * @param endDay 准备查询的结束日期
     * @param dayOfWeek 准备查的一周中的某一天(准备查周几?)
     * @return 包含所查周几的天数
     * @throws ParseException 不支持跨年查询、不支持结束日期早于起始日期、周几输入错误等
     */
    public static int getMondayNumber(String startDay,String endDay,int dayOfWeek) throws ParseException{
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        int differenceDay = 0;
        //转换起始日期
        Date startDate = sdf.parse(startDay);
        //转换结束日期
        Date endDate = sdf.parse(endDay);
        //实例化起始和结束Calendar对象
        Calendar startCalendar = Calendar.getInstance();
        Calendar endCalendar = Calendar.getInstance();
        //分别设置Calendar对象的时间
        startCalendar.setTime(startDate);
        endCalendar.setTime(endDate);

        //定义起始日期和结束日期分别属于第几周
        int startWeek = startCalendar.get(Calendar.WEEK_OF_YEAR);
        int endWeek = endCalendar.get(Calendar.WEEK_OF_YEAR);

        //拿到起始日期是星期几
        int startDayOfWeek = startCalendar.get(Calendar.DAY_OF_WEEK);
        if(startDayOfWeek == 1)    {
            startDayOfWeek = 7;
            startWeek--;
        }else startDayOfWeek--;

        //拿到结束日期是星期几
        int endDayOfWeek = endCalendar.get(Calendar.DAY_OF_WEEK);
        if(endDayOfWeek == 1) {
            endDayOfWeek = 7;
            endWeek--;
        }else endDayOfWeek--;

        //计算相差的周数
        int differenceWeek = endWeek - startWeek;

        //开始计算
        if(startDayOfWeek <= dayOfWeek) {
            if(endDayOfWeek >= dayOfWeek)
                differenceDay = differenceWeek + 1;
        }else if(startDayOfWeek > dayOfWeek) {
            if(endDayOfWeek < dayOfWeek)
                differenceDay = differenceWeek-1;
        }else {
            differenceDay = differenceWeek;
        }
        return differenceDay;
    }
}

觉得没啥技术含量,就此记录下吧,有时间再优化下,比如能够跨年查询。

时间: 2024-08-04 14:24:29

java实现两个日期内具有几个星期几的计算的相关文章

Java获取两个时间段内的所有日期

import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; /** * 获取两个时间段内的所有日期,日期可跨年 */ public class GetBetweenDate { public static void main(String[] args) { List<String>

Java 获取两个日期之间的日期

1.前期需求,两个日期,我们叫他startDate和endDate,然后获取到两个日期之间的日期 /** * 获取两个日期之间的日期 * @param start 开始日期 * @param end 结束日期 * @return 日期集合 */ private List<Date> getBetweenDates(Date start, Date end) { List<Date> result = new ArrayList<Date>(); Calendar tem

java 获取两个日期相差的毫秒数

方法一可以使用date的getTime()方法来将当前日期格式的时间转换为毫秒数,进而相减. long systime = new Date().getTime();//当前系统时间        long oldtime = old.getTime();//相比较的时间        Long time = (systime - oldtime);//相差毫秒数 方法二则使用calendar 的getTimeInMillis() 方法来将当前日期格式的时间转换为毫秒数. Calendar no

mybati内sql查询语句在两个日期内

装载自: http://blog.csdn.net/u010442302/article/details/72902441?locationNum=9&fps=1 <select id="selectByParamCount" resultType="java.lang.Integer" parameterType="com.sss.fin.cif.vo.admin.BankCardAuditQuery"> select co

java遍历两个日期之间的所有日期

start.set(2016, 3, 10); end.set(2016, 4, 10); 1000 * 60 * 60 * 24l; Long time = startTIme; while (time <= endTime) { new Date(time); new SimpleDateFormat("yyyy-MM-dd"); time += oneDay; }

Java比较两个日期的大小

public static String getComparedSBQDate(String yxqq,String starttime){ String str = starttime; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); try { Date d1 = sdf.parse(yxqq); Date d2 = sdf.parse(starttime); if(d1.before

Android-计算两个日期之间间隔的天数

要计算两个日期之间间隔的天数,必须把两个日期转换成统一的时间戳,然后计算其毫秒差,再将毫秒差转换成天数. System.out.print("开始时间:"); String str1 = beginTime; // "yyyyMMdd"格式 如 20131022 System.out.println("\n结束时间:"); String str2 = _endTime; // "yyyyMMdd"格式 如 20131022 S

如何判断两个日期在一周内

如何判断两个日期在一周内,首先,需要搞清楚一周内到底是什么含义,国内通常是以周一作为每周的第一天,而西方普遍以周日作为每周的第一天. 以下,我们以西方的标准来处理这个问题. 常见的日期结构: struct DateTime { int year; int month; int day; int weekday; //days since Sunday - [0, 6] int hour; int minute; int second; }; 上述结构中与周相关的参数只有weekday,应该设法利

计算两个日期之间的天数差C++/java

1--Java 分析:调用java中Calendar类 int days(Date date1,Date date2){ Calendar cal = new Calendar.getInstance(); cal.setTime(date1); int time1 = cal.get(Calendar.DAY_OF_YEAR); cal.setTime(date2); int time2 = cal.get(Calendar.DAY_OF_YEAR); //long days = Math.a