JAVA 日期 一个时间段总共几周,每一天星期几

/**
     * 查询一个时间段的总周数和查询当前时间是第几周
     * @param start
     * @param end
     * @return
     */
    private int[] selectWeekNum(Date start,Date end,int week,int flag){
        java.util.Calendar now = java.util.Calendar.getInstance();
        java.util.Calendar c_total = java.util.Calendar.getInstance();
        java.util.Calendar c_begin =  java.util.Calendar.getInstance();
        java.util.Calendar c_end = java.util.Calendar.getInstance();
        int count = 0;
        int weekTotal = 0;
        try {
            c_begin.setTime(start);
            c_end.setTime(end);
            now.setTime(new SimpleDateFormat("yyyy-MM-dd").parse(sdf.format(new Date())));
            int begin = c_begin.get(java.util.Calendar.WEEK_OF_YEAR);
            int over =c_end.get( java.util.Calendar.WEEK_OF_YEAR);
            int z = now.get( java.util.Calendar.WEEK_OF_YEAR);
            if (c_begin.getWeekYear() != c_end.getWeekYear()) {
                Date totalYear = new SimpleDateFormat("yyyy-MM-dd").parse(c_begin.getWeekYear() + "-12-31");
                c_total.setTime(totalYear);
                int x = c_total.get(java.util.Calendar.WEEK_OF_YEAR);
                while(x==1){
                    c_total.add(java.util.Calendar.DAY_OF_MONTH, -1);
                    x = c_total.get(java.util.Calendar.WEEK_OF_YEAR);
                }
                //如果结束时间刚好是星期天则不加1
                int weekNum  = this.dayForWeek(new SimpleDateFormat("yyyy-MM-dd").format(end));
                int duoyu = 0;
                if(weekNum==7) {
                     duoyu = x - begin+1;
                }else{
                    duoyu = x - begin + 1+1;
                }
                weekTotal = over + duoyu;
            } else {
                //如果结束时间刚好是星期天则不加1
                int weekNum  = this.dayForWeek(new SimpleDateFormat("yyyy-MM-dd").format(end));
                if(weekNum==7){
                    weekTotal = over - begin ;
                }else{
                    weekTotal = over - begin + 1;
                }
            }
            if (c_begin.getWeekYear() != now.getWeekYear()) {
                //计算总周数
                int x = c_total.get(java.util.Calendar.WEEK_OF_YEAR);
                while(x==1){
                    c_total.add(java.util.Calendar.DAY_OF_MONTH, -1);
                    x = c_total.get(java.util.Calendar.WEEK_OF_YEAR);
                }
                int weekNum  = this.dayForWeek(new SimpleDateFormat("yyyy-MM-dd").format(start));
                int duoyu =0;
                if(weekNum==7){
                    duoyu = x - begin + 1+1;
                }else{
                    duoyu = x - begin + 1;
                }
                count = duoyu + z;
            } else {
                int weekNum  = this.dayForWeek(new SimpleDateFormat("yyyy-MM-dd").format(start));
                if(weekNum==7){
                    count = (z - begin + 1)+1;
                }else{
                    count = (z - begin + 1);
                }
            }
            if (c_end.getTime().getTime() < now.getTime().getTime() || count < 0) {
                //如果当前时间大于学期结束时间,默然显示第一周
                count = 1;
            }        //下拉框默认显示的东西可根据实际情况删除或保留
            if (week != 0 && flag == 1) {
                count = week;
            }
        }  catch (Exception e) {
              e.printStackTrace();
        }
        return new int[]{count,weekTotal};
    }
/**
     * 判断当前日期是星期几
     *
     * @param pTime 修要判断的时间
     * @return dayForWeek 判断结果
     * @Exception 发生异常
     */
    public int dayForWeek(String pTime) throws Exception {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        java.util. Calendar c =  java.util. Calendar.getInstance();
        c.setTime(format.parse(pTime));
        int dayForWeek = 0;
        if(c.get( java.util. Calendar.DAY_OF_WEEK) == 1){
            dayForWeek = 7;
        }else{
            dayForWeek = c.get( java.util. Calendar.DAY_OF_WEEK) - 1;
        }
        return dayForWeek;
    }


 /**
     * 查询一周的开始时间和结束时间
     * @param date
     * @return
     */
    private Map<String,Date>  onceWeek(Date date){
       java.util.Calendar currentDate = new GregorianCalendar();
        currentDate.setTime(date);
        currentDate.setFirstDayOfWeek( java.util.Calendar.MONDAY);
        currentDate.set( java.util.Calendar.HOUR_OF_DAY, 0);
        currentDate.set( java.util.Calendar.MINUTE, 0);
        currentDate.set( java.util.Calendar.SECOND, 0);
        currentDate.set( java.util.Calendar.DAY_OF_WEEK,  java.util.Calendar.MONDAY);
        Date dBegin = (Date) currentDate.getTime().clone();

        currentDate.setFirstDayOfWeek( java.util.Calendar.MONDAY);
        currentDate.set( java.util.Calendar.HOUR_OF_DAY, 23);
        currentDate.set( java.util.Calendar.MINUTE, 59);
        currentDate.set( java.util.Calendar.SECOND, 59);
        currentDate.set( java.util.Calendar.DAY_OF_WEEK,  java.util.Calendar.SUNDAY);

        Date dEnd =(Date) currentDate.getTime().clone();

        //返回星期天和一个星期的日期和周几
        Map<String,Date> map = new HashMap<>();
        map.put("dBegin",dBegin);
        map.put("dEnd",dEnd);
        return map;
    }
 
/**
     * 查询一周的时间
     * @param start
     * @param end
     * @param week
     * @param flag
     * @return
     */
    private  List< List<ScheduleVO> >  onceWeekList(Date start ,Date end,int week,int flag) {
        List< List<ScheduleVO>> list = new ArrayList<>();
        try {
            int[] total = this.selectWeekNum(start, end,week,flag);
            int weekTotal = total[1];
            java.util.Calendar currentDate = new GregorianCalendar();
            currentDate.setTime(start);
            for (int i = 0; i < weekTotal; i++) {
               Map<String,Date> map = this.onceWeek(currentDate.getTime());
                List<ScheduleVO> lDate = findDates(map.get("dBegin"),map.get("dEnd"));
                currentDate.setTime(map.get("dEnd"));
                currentDate.add(java.util.Calendar.DAY_OF_MONTH, 1);
                list.add(lDate);
            }
        }catch (Exception e){
            System.out.print(e.getMessage());
        }
        return  list;
    }


  /**
     *查询当前日期和指定日期为星期几
     * @param beginDate
     * @param endDate
     * @return
     */
    public static List<ScheduleVO> findDates(Date beginDate, Date endDate)
    {
        //数字转中文
        SimpleDateFormat sif = new SimpleDateFormat("yyyy-MM-dd");
        Map<Integer,String> weekNumString = new HashMap<>();
        weekNumString.put(1,"星期一");
        weekNumString.put(2,"星期二");
        weekNumString.put(3,"星期三");
        weekNumString.put(4,"星期四");
        weekNumString.put(5,"星期五");
        weekNumString.put(6,"星期六");
        weekNumString.put(7,"星期天");

        ScheduleVO schedule1 = new ScheduleVO();
        List<ScheduleVO> lDate = new ArrayList<>();
        schedule1.setDate(sif.format(beginDate));
        schedule1.setWeekName("星期一");
        schedule1.setWeek(1);
        lDate.add(schedule1);

        java.util.Calendar cal = java.util.Calendar.getInstance();
        cal.setTime(beginDate);
        boolean bContinue = true;
        int week = 1;
        while (bContinue) {
            //根据日历的规则,为给定的日历字段添加或减去指定的时间量
            cal.add(java.util.Calendar.DAY_OF_MONTH, 1);
            // 测试此日期是否在指定日期之后
            if (endDate.after(cal.getTime()))
            {
                week++;
                ScheduleVO schedule = new ScheduleVO();
                schedule.setDate(sif.format(cal.getTime()));
                schedule.setWeekName(weekNumString.get(week));
                schedule.setWeek(week);
                lDate.add(schedule);
            }else {
                bContinue = false;
            }
        }
        return lDate;
    }


				
时间: 2024-10-21 09:03:23

JAVA 日期 一个时间段总共几周,每一天星期几的相关文章

java实现输入一个时间段,以及相应的星期数,获得这个时间段中这些星期的日期

最近在做毕设,遇到一个问题.对于给定的一个时间段和特定的星期,我需要获得这个时间段中所有的给定星期的日期. 比如,获得从2015-01-01到2015-01-21所有的星期一和星期二的日期. package com.cc.common; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; public class WeekDayUtil { /** * 输入一个日期的时间段

js 日期比较大小,js判断日期是否在区间内,js判断时间段是否在另外一个时间段内

/** * 日期解析,字符串转日期 * @param dateString 可以为2017-02-16,2017/02/16,2017.02.16 * @returns {Date} 返回对应的日期对象 */ function dateParse(dateString){ var SEPARATOR_BAR = "-"; var SEPARATOR_SLASH = "/"; var SEPARATOR_DOT = "."; var dateArr

全面解析Java日期时间API

时区 GMT(Greenwich Mean Time):格林尼治时间,格林尼治标准时间的正午是指当太阳横穿格林尼治子午线时(也就是在格林尼治上空最高点时)的时间. UTC(Universal Time Coordinated):统一协调时间,其以原子时秒长为基础,在时刻上尽量接近于格林尼治标准时间,标准 UTC 时间格式 yyyy-MM-dd'T'HH:mm:ss.SSSXXX. 格林尼治时间已经不再被作为标准时间使用,UTC 是最主要的世界时间标准. Java提供了获取当前时间的方法 Syst

Java日期的格式String类型GMT,GST换算成日期Date种类

请尊重他人的劳动成果.转载请注明出处:Java日期格式化之将String类型的GMT,GST日期转换成Date类型 http://blog.csdn.net/fengyuzhengfan/article/details/40164721 在实际开发过程中常常会须要将Date类型的数据封装成XML或Json格式在网络上进行传输,另外在将Date类型的数据存到Sqlite数据库中后再取出来的时候仅仅能获取String类型的日期了,这是由于SQLite是无类型的.这样不得不面对将String 类型的日

Java日期时间使用总结

一.Java中的日期概述 日期在Java中是一块非常复杂的内容,对于一个日期在不同的语言国别环境中,日期的国际化,日期和时间之间的转换,日期的加减运算,日期的展示格式都是非常复杂的问题. 在Java中,操作日期主要涉及到一下几个类: 1.java.util.Date 类 Date 表示特定的瞬间,精确到毫秒.从 JDK 1.1 开始,应该使用 Calendar 类实现日期和时间字段之间转换,使用 DateFormat 类来格式化和分析日期字符串.Date 中的把日期解释为年.月.日.小时.分钟和

Java日期格式化之将String类型的GMT,GST日期转换成Date类型

请尊重他人的劳动成果,转载请注明出处:Java日期格式化之将String类型的GMT,GST日期转换成Date类型 http://blog.csdn.net/fengyuzhengfan/article/details/40164721 在实际开发过程中经常会需要将Date类型的数据封装成XML或Json格式在网络上进行传输,另外在将Date类型的数据存到Sqlite数据库中后再取出来的时候只能获取String类型的日期了,这是因为SQLite是无类型的.这样不得不面对将String 类型的日期

Java 日期时间

java.util 包提供了 Date 类来封装当前的日期和时间. Date 类提供两个构造函数来实例化 Date 对象. 第一个构造函数使用当前日期和时间来初始化对象. Date( ) 第二个构造函数接收一个参数,该参数是从1970年1月1日起的毫秒数. Date(long millisec) Date对象创建以后,可以调用下面的方法. 序号 方法和描述 1 boolean after(Date date)若当调用此方法的Date对象在指定日期之后返回true,否则返回false. 2 boo

java日期操作大全

摘自(http://www.blogjava.net/i369/articles/83483.html) java日期操作 大全 先来一个:  取得指定月份的第一天与取得指定月份的最后一天  http://iamin.blogdriver.com/iamin/847990.html /**           *  取得指定月份的第一天           *           *  @param  strdate  String           *  @return  String   

[转]Java日期时间使用总结

原文地址:http://lavasoft.blog.51cto.com/62575/52975/ 一.Java中的日期概述 日期在Java中是一块非常复杂的内容,对于一个日期在不同的语言国别环境中,日期的国际化,日期和时间之间的转换,日期的加减运算,日期的展示格式都是非常复杂的问题. 在Java中,操作日期主要涉及到一下几个类: 1.java.util.Date 类 Date 表示特定的瞬间,精确到毫秒.从 JDK 1.1 开始,应该使用 Calendar 类实现日期和时间字段之间转换,使用 D