java实现输入一个时间段,以及相应的星期数,获得这个时间段中这些星期的日期
2015-04-11 22:49
555 查看
最近在做毕设,遇到一个问题。对于给定的一个时间段和特定的星期,我需要获得这个时间段中所有的给定星期的日期。
比如,获得从2015-01-01到2015-01-21所有的星期一和星期二的日期。
package com.cc.common;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
public class WeekDayUtil {
/**
* 输入一个日期的时间段,以及相应的星期数,获得这些星期的日期
*/
private static Map<Integer, Integer> weekNumberMap = new HashMap<Integer, Integer>();
static {
weekNumberMap.put(0,1);
weekNumberMap.put(1,2);
weekNumberMap.put(2,3);
weekNumberMap.put(3,4);
weekNumberMap.put(4,5);
weekNumberMap.put(5,6);
weekNumberMap.put(6,7);
}
public static List<String> getDates(String dateFrom, String dateEnd, List<Integer> weekDays) {
long time;
long perDayMilSec = 24L * 60 * 60 * 1000;
List<String> dateList = new ArrayList<String>();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
// 需要查询的星期系数
String strWeekNumber = weekForNum(weekDays);
try {
dateFrom = sdf.format(sdf.parse(dateFrom).getTime() - perDayMilSec);
while (true) {
time = sdf.parse(dateFrom).getTime();
time = time + perDayMilSec;
Date date = new Date(time);
dateFrom = sdf.format(date);
if (dateFrom.compareTo(dateEnd) <= 0) {
// 查询的某一时间的星期系数
Integer weekDay = dayForWeek(date);
// 判断当期日期的星期系数是否是需要查询的
if (strWeekNumber.contains(weekDay.toString())) {
dateList.add(dateFrom);
}
} else {
break;
}
}
} catch (ParseException e) {
e.printStackTrace();
}
return dateList;
}
// 等到当期时间的周系数。星期日:1,星期一:2,星期二:3,星期三:4,星期四:5,星期五:6,星期六:7
public static Integer dayForWeek(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar.get(Calendar.DAY_OF_WEEK);
}
/**
* 得到对应星期的系数 0:1,星期
*/
public static String weekForNum(List<Integer> weekDays) {
// 返回结果为组合的星期系数
String weekNumber = "";
for (Integer weekDay : weekDays) {
weekNumber = weekNumber + "" + getWeekNum(weekDay).toString();
}
return weekNumber;
}
// 将星期转换为对应的系数 0,星期日; 1,星期一; 2....
public static Integer getWeekNum(int strWeek) {
return weekNumberMap.get(strWeek);
}
public static void main(String[] args) {
//输出从2015-01-01到2015-01-21之间的所有星期一和星期二的日期。
List<Integer> daysOfOneWeek = new ArrayList<Integer>();
daysOfOneWeek.add(1);
daysOfOneWeek.add(2);
List<String> daysNeedBookList = getDates("2015-01-01", "2015-01-21", daysOfOneWeek);
for (String s : daysNeedBookList) {
System.out.println(s);
}
}
}
main方法测试后,输出:
2015-01-05
2015-01-06
2015-01-12
2015-01-13
2015-01-19
2015-01-20
比如,获得从2015-01-01到2015-01-21所有的星期一和星期二的日期。
package com.cc.common;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
public class WeekDayUtil {
/**
* 输入一个日期的时间段,以及相应的星期数,获得这些星期的日期
*/
private static Map<Integer, Integer> weekNumberMap = new HashMap<Integer, Integer>();
static {
weekNumberMap.put(0,1);
weekNumberMap.put(1,2);
weekNumberMap.put(2,3);
weekNumberMap.put(3,4);
weekNumberMap.put(4,5);
weekNumberMap.put(5,6);
weekNumberMap.put(6,7);
}
public static List<String> getDates(String dateFrom, String dateEnd, List<Integer> weekDays) {
long time;
long perDayMilSec = 24L * 60 * 60 * 1000;
List<String> dateList = new ArrayList<String>();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
// 需要查询的星期系数
String strWeekNumber = weekForNum(weekDays);
try {
dateFrom = sdf.format(sdf.parse(dateFrom).getTime() - perDayMilSec);
while (true) {
time = sdf.parse(dateFrom).getTime();
time = time + perDayMilSec;
Date date = new Date(time);
dateFrom = sdf.format(date);
if (dateFrom.compareTo(dateEnd) <= 0) {
// 查询的某一时间的星期系数
Integer weekDay = dayForWeek(date);
// 判断当期日期的星期系数是否是需要查询的
if (strWeekNumber.contains(weekDay.toString())) {
dateList.add(dateFrom);
}
} else {
break;
}
}
} catch (ParseException e) {
e.printStackTrace();
}
return dateList;
}
// 等到当期时间的周系数。星期日:1,星期一:2,星期二:3,星期三:4,星期四:5,星期五:6,星期六:7
public static Integer dayForWeek(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar.get(Calendar.DAY_OF_WEEK);
}
/**
* 得到对应星期的系数 0:1,星期
*/
public static String weekForNum(List<Integer> weekDays) {
// 返回结果为组合的星期系数
String weekNumber = "";
for (Integer weekDay : weekDays) {
weekNumber = weekNumber + "" + getWeekNum(weekDay).toString();
}
return weekNumber;
}
// 将星期转换为对应的系数 0,星期日; 1,星期一; 2....
public static Integer getWeekNum(int strWeek) {
return weekNumberMap.get(strWeek);
}
public static void main(String[] args) {
//输出从2015-01-01到2015-01-21之间的所有星期一和星期二的日期。
List<Integer> daysOfOneWeek = new ArrayList<Integer>();
daysOfOneWeek.add(1);
daysOfOneWeek.add(2);
List<String> daysNeedBookList = getDates("2015-01-01", "2015-01-21", daysOfOneWeek);
for (String s : daysNeedBookList) {
System.out.println(s);
}
}
}
main方法测试后,输出:
2015-01-05
2015-01-06
2015-01-12
2015-01-13
2015-01-19
2015-01-20
相关文章推荐
- java中给定一个日期,获得这个日期所在周的周一的日期
- Java实现给定一个日期 求出这个日期是这一年中的第几天
- Java实现根据输入的日期以及天数,获取此日期之后的天数的工作日
- 用java实现输入日期后得到这个日期是这一年的第多少天
- A.4.5-输入一个日期,然后 DateTime 类,实现求这个日期是星期几,是该年的第几天
- java 输入一个数字,反转输出这个数字的值(实现方法)
- 给出形如2012-02-01和2012-04-04这样的两个string,如何用java获得这个时间段内的所有日期
- XSL中实现输入一个日期返回此日期的星期
- 输入年月日,输出这个日期是该年的第几天,java语言,switch-case实现
- java实现输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head
- java 实现接受一个有字母和数字以及空格组成的字符串,和一个字符,然后输出输入字符串中含有该字符的个数。不区分大小写
- 定义一个类DOG,包含age,weight等属性,以及对这些属性操作的方法,实现并测试这个类。
- Problem Description 输入n(n<100)个数,找出其中最小的数,将它与最前面的数交换后输出这些数。 Input 输入数据有多组,每组占一行,每行的开始是一个整数n,表示这个测试实例的数值的个数,跟着就是n个整数。n=0表示输入的结束,不做处理。 Output 对于每组
- 用C语言来实现_输入一个日期(年月日),计算是这一年中的第几天
- 实现一个"可变二维数组",这个二维数组的行数要求用户从键盘输入,每行的元素个数仍由用户从键盘输入. //数组元素值用户可以自定义.最后把二维数组打印出来.不要忘记释放数组内存. /*void main
- 用java写一个用户只能从键盘输入整数,程序输出这些整数的乘积
- 自己写的一个项目中实现的购物车功能!购物车页面以及实现购物车相应的dao包!
- Java根据日期获得星期
- 获得一个指定星期的起始和终止日期
- java--封装一类Java对象,用户从输入对话框输入两个日期,程序将判断两个日期的大小关系(比如输出:您输入的第二个日期大于第一个日期)以及两个日期之间的间隔天数(比如输出:2006年6月6日和