`
wanglihu
  • 浏览: 919485 次
  • 性别: Icon_minigender_1
  • 来自: 黑龙江
社区版块
存档分类

求两个日期间的月份/日/小时集合

    博客分类:
  • java
阅读更多
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;

public class DateUtils {
	public static void main(String[] args) throws ParseException {
		System.out.println("=====================求两个日期间的月份集合=======================");
		List<String> month_lists = getBetweenTwoDateList("2011-12-01 00:00:00","2012-04-11 03:03:03",1); 
		for(int i=0;i<month_lists.size();i++){
			System.out.println(month_lists.get(i));
		}
		System.out.println("=====================求两个日期间的日集合=======================");
		List<String> day_lists = getBetweenTwoDateList("2011-12-01 00:00:00","2012-04-11 03:03:03",2); 
		for(int i=0;i<day_lists.size();i++){
			System.out.println(day_lists.get(i));
		}
		System.out.println("=====================求两个日期间的小时集合=======================");
		List<String> hour_lists = getBetweenTwoDateList("2011-12-01 00:00:00","2012-04-11 03:03:03",3); 
		for(int i=0;i<hour_lists.size();i++){
			System.out.println(hour_lists.get(i));
		}

	}
	/*
	 * 求两个日期间的月份/日/小时集合
	 * params:startDateStr 开始时间
	 * @param endDateStr   结束时间
	 * @param type         时间粒度  1:月  2:日 3:小时
	 * @return List
	 */
	public static List<String> getBetweenTwoDateList(String startDateStr,String endDateStr,int type) throws ParseException{
		List<String> list = new LinkedList<String>();  
		DateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
		Date startDate = simpleDateFormat.parse(startDateStr); // 开始日期
		Date endDate   = simpleDateFormat.parse(endDateStr); //结束日期
		Calendar startCalendar = Calendar.getInstance();
		Calendar endCalendar = Calendar.getInstance();
		startCalendar.setTime(startDate);
		endCalendar.setTime(endDate);
		String result = null;
		while (startCalendar.compareTo(endCalendar) <= 0) {
			startDate = startCalendar.getTime();
			switch(type){
				case 1:
					result =  new SimpleDateFormat("yyyy-MM").format(startDate);
					result = result.substring(0, result.length());
					list.add(result);
					// 开始日期加一个月直到等于结束日期为止
					startCalendar.add(Calendar.MONTH, 1);
					break;
				case 2:
					result =  new SimpleDateFormat("yyyy-MM-dd").format(startDate);
					result = result.substring(0, result.length());
					list.add(result);
					// 开始日期加一个天直到等于结束日期为止
					startCalendar.add(Calendar.DAY_OF_MONTH, 1);
					break;
				default:
					result =  new SimpleDateFormat("yyyy-MM-dd HH").format(startDate);
					result = result.substring(0, result.length());
					list.add(result);
					// 开始日期加一个月直到等于结束日期为止
					startCalendar.add(Calendar.HOUR, 1);
					break;
			}
		}
		return list;
	}

}
0
2
分享到:
评论
3 楼 dawei9561 2013-03-21  
非常好,感谢楼主分享!
2 楼 stone1116 2012-07-13  
不错
1 楼 wishine 2011-11-14  
非常好的东西,刚好用到,感谢楼主~~·

相关推荐

    常用java date方法集合

    通过本文,我们将详细了解如何计算特定月份的最大天数、实现`Calendar`与`Date`之间的转换、格式化日期时间、计算一年中的星期数、使用`add()`和`roll()`方法调整日期,以及计算两个日期间的间隔天数。 #### 1. ...

    ABAP日期函数(求月末日,第几周,search help 只显示年月) 使用方法实例

    在实际应用中,日期函数的使用非常广泛,例如计算两个日期间的工作天数、获取当前月份的第一天和最后一天、计算日期所在的周数、弹出选择周的对话框等。 1. 计算两个日期间的工作天数 在实际应用中,我们需要计算...

    office函数大全

    - **功能**:计算两个日期间的有效工作日数量。 - **应用场景**:用于计算项目预计完成所需的工时。 ##### NOW - 返回当前日期和时间的系列数 - **功能**:返回当前系统的日期和时间。 - **应用场景**:用于标记...

    北师大数学三年级上册时间与数学PPT学习教案.pptx

    学生需要将这些休息日分别标记出来,形成两个不同的集合。这个过程有助于学生理解集合的元素和集合间的关系。 2. **日历中的数学规律**:课程引导学生观察9月份的日历,寻找日期间的规律。例如,找出每个月的天数,...

    VBS函数集合

    2. **And运算符**:在逻辑表达式中,如果两个表达式都为真,则结果为真,否则为假。 3. **Array函数**:创建一个 Variant 类型的数组,可以包含任意数量和类型的元素。 4. **Asc函数**:将字符转换为其对应的ANSI...

    excel问题解答集合

    - 使用`DATEDIF`函数,准确计算两个日期间的天数间隔。 49. **Excel文件修复** - 使用Excel内置的“打开并修复”功能或第三方恢复软件,尝试修复损坏的文件。 50. **数据追加至总表** - 利用Power Query或VBA宏...

    PLSQL常用方法.txt

    3. **MONTHS_BETWEEN**: 计算两个日期间的月份数。 4. **NEXT_DAY**: 返回指定日期之后的下一个特定星期的日期。 5. **ROUND**: 舍入到最近的日期。 6. **TRUNC**: 截断日期到特定的时间单位。 7. **GREATEST**: ...

    上海市2018年共享单车数据wgs84坐标系8月份到9月份共享单车数据-8.zip

    标题中的“上海市2018年共享单车数据wgs84坐标系8月份到9月份共享单车数据-8.zip”表明这是一个关于共享单车使用情况的数据集,涵盖了2018年8月至9月两个月的时间段,主要针对上海地区。这个数据集是以WGS84坐标系为...

    EXCEL函数比较全

    NETWORKDAYS计算两个日期间的完整工作日;NOW返回当前日期和时间;TIMEVALUE将文本时间转换为序列号;TODAY返回当前日期;WEEKDAY和WORKDAY分别返回星期和工作日的序列号。 工程函数涉及复杂的数学计算,如贝塞尔...

    Excel函数计算公式大全(完整).doc

    * NETWORKDAYS:返回两个日期间的全部工作日数。 * NOW:返回当前日期和时间的序列号。 * SECOND:将序列号转换为秒。 * TIME:返回特定时间的序列号。 * TIMEVALUE:将文本格式的时间转换为序列号。 * TODAY:返回...

    销售述职报告模板集合7篇_1.docx

    5. **首批商铺完美售罄活动**(20xx年4月20日至20xx年五一期间) - **活动目的**:推动7号楼的销售,但由于工期延期,活动效果受限。 - **价格调整**:首次对前期房源的价格进行了调整,8号楼每平方米上调20元。 ...

    PLSQL常用语句汇总

    - `MONTHS_BETWEEN(date1, date2)`:返回两个日期间的月份数。 - `NEXT_DAY(date, day)`:返回指定日期后下一个特定星期几的日期。 - `ROUND(date[, format])`:按指定格式四舍五入日期。 - `TRUNC(date[, ...

    sql plsql 函数学习 Oracle 快速入门

    日期函数中,`ADD_MONTHS(date, months)` 添加或减去指定月份数,`LAST_DAY(date)` 返回该月的最后一天,`MONTHS_BETWEEN(date1, date2)` 计算两个日期间的月份数,`NEXT_DAY(date, day)` 返回给定日期之后的指定...

    Excel函数

    计算两个日期间的工作日数量。 **11. NOW** 返回当前日期和时间。 **12. SECOND** 提取时间的秒数部分。 **13. TIME** 返回一个时间值,表示特定的小时数、分钟数和秒数。 **14. TIMEVALUE** 将文本字符串...

    述职报告模板集合10篇.docx

    克服了6月份变频器IGCT问题,并自行解决了装矿保护、投料点靠前、箕斗卸矿落矿严重等问题,共计进行了50余项技术革新和技术难题的解决。 - **-600运输大巷**:面对电机车故障率高、维修硐室未形成等问题,车间采取...

Global site tag (gtag.js) - Google Analytics