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 {

/**

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

*/

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

时间: 2024-10-20 08:50:41

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

输入一个int型数据,计算出它在内存中存储时含1的个数

/******************************************************** 输入一个int型数据,计算出它在内存中存储时含1的个数 比如: 输入:5 输出:2 ********************************************************/ #include<iostream> int CountOne(int num) { int count = 0; while(num){ count++; num = num&am

输入一个正整数n,计算出[0,n]这些整数中的二进制数没有连续3个1的数字有多少

输入一个正整数n,计算出[0,n]这些整数中的二进制数没有连续3个1的数字有多少? 例子:输入数字9,则输出结果位9.因为[0-9]中,只有数字7有连续的三个'1'出现,别的都没有,所以一共有9个数字满足要求. 分析:这个题目与求解一个正整数中'1'的个数有点类似,就是进行一些循环处理. 代码如下: 1 #include <iostream> 2 using namespace std; 3 int main() 4 { 5 int n,num_1=0,k=0; 6 cin>>n;

Java 输入一个整数,计算它各位上数字的和。(注意:是任意位的整数)

import java.util.*; /* * 输入一个整数,计算它各位上数字的和. * (注意:是任意位的整数) */ public class Sum02 { public static void main(String[] args) { System.out.print("请输入任意一个整数:"); Scanner s = new Scanner(System.in); int sum = 0; int t = s.nextInt(); while(t!=0){ sum =

10.16输入一个字符串,内有数字和非数字字符,如: a123x456 17960? 302tab5876 将其中连续的数字作为一个整数,依次存放到一数组num中。例如123放在num[0]中,456放在num[1]中……统计共有多少个整数,并输出这些数。

10.16输入一个字符串,内有数字和非数字字符,如: a123x456 17960? 302tab5876 将其中连续的数字作为一个整数,依次存放到一数组num中.例如123放在num[0]中,456放在num[1]中--统计共有多少个整数,并输出这些数. #include <stdio.h> int main(){ void search(char * parr, int * pnum); char arr[100],* parr; int num[30],* pnum; parr=arr;

当你输入一个网址,实际会发生什么

作为一个软件开发者,你一定会对网络应用如何工作有一个完整的层次化的认知,同样这里也包括这些应用所用到的技术:像浏览器,HTTP,HTML,网络服务器,需求处理等等. 本文将更深入的研究当你输入一个网址的时候,后台到底发生了一件件什么样的事- 1.首先嘛,你得在浏览器里输入要网址:   2.浏览器查找域名的IP地址   导航的第一步是通过访问的域名找出其IP地址.DNS查找过程如下: 浏览器缓存 – 浏览器会缓存DNS记录一段时间. 有趣的是,操作系统没有告诉浏览器储存DNS记录的时间,这样不同浏

Java日期时间API系列19-----Jdk8中java.time包中的新的日期时间API类,ZonedDateTime与ZoneId和LocalDateTime的关系,ZonedDateTime格式化和时区转换等。

通过Java日期时间API系列6-----Jdk8中java.time包中的新的日期时间API类中时间范围示意图:可以很清晰的看出ZonedDateTime相当于LocalDateTime+ZoneId. ZonedDateTime是用来处理时区相关的时间,它的各种计算都离不开ZoneId.先看ZoneId. 1. ZoneId 为时区ID,比如Europe/Paris,表示欧洲巴黎时区 1.1 时区相关知识,时区,UTC时间,GMT时间,Unix时间戳 时区 地球自西向东旋转,东边比西边先看到

Java学习:一个仿ATM机键盘做的密码输入

1.程序运行截图: 2.程序实现的功能 1)进入程序时,程序会询问你输入一个密码 2)进入键盘界面后,按下数字0-9可以输入一个字符,按取消按钮可以退出程序,重置按钮可以将上面的JPasswordField变为空,按下确定按钮,提示输入的密码是否正确 3.程序代码 import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Arrays;

java小练习:输入一个字符,判断该字符是数字?英文字母?还是其他字符

package practiceGO; import java.util.Scanner; /*  * 3.输入一个字符,判断该字符是数字?英文字母?还是其他字符  */ public class Cto { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("输入一个字符:"); char ch = sc.next().charAt(0);

java循环练习:用户输入一个10以内的数字,通过运算求出该数字的阶乘

package practiceGO; import java.util.Scanner; /*  * 4.用户输入一个10以内的数字,通过运算求出该数字的阶乘  */ public class Cto { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入一个10以内的数字,由系统计算阶乘"); int num = sc.nextIn