`
askjsp
  • 浏览: 21779 次
  • 性别: Icon_minigender_2
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

给定一个起始日期和一个结束日期,怎么获取中间每天的日期?

阅读更多

比如说现在有一个日期 2010-01-01 有另一日期 2010-10-01

怎么计算中间总共的天数和之间的每一天呢?

比如说有这样一个算法:

 

public class MyDate{

private int days;
private List dayList;

public void calDate(String sDate,String eDate){
   .........

   days=xxx;
   dayList=xxx;
}

}

 

    这样的一个算法怎么写呢?

 

    朋友们帮想下,谢谢了

分享到:
评论
5 楼 mfkvfn 2011-03-11  
1楼的代码有几个问题:
(1)她要求的是String类型。需要做校验。
(2)有可能startDate或endDate是null。你那代码15行或17行的地方可能会出现NullPointerException。
(3)如果startDate<endDate的话,你那天数差是一个负数。而且期间的每一天 结果也是错的。因为 for (int index = 1; index < result; index++)这里result<0所以不会输出任何天数。
(4) long result = (endValue - startValue) / 1000 / 60 / 60 / 24; 这里改成 long result = (endValue - startValue) / (1000*60*60*24); 效率更好。具体原因是除法效率比乘法要差。
4 楼 Dreamsleep 2010-09-27  
将两个时间求毫秒    然后做差  最后除以24*60*60*1000 就OK啦
3 楼 zhao103804 2010-09-25  
看到这个让我想起了很久很久以前做过的万年历那个程序
2 楼 askjsp 2010-09-20  
rainsilence 写道
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;


public class MyDate {
	
	private List<Date> dayList = new ArrayList<Date>();
	
	
	public long countDays(Date startDate, Date endDate) {
		
		long startValue = startDate.getTime();
		
		long endValue = endDate.getTime();
		
		if (startValue > endValue) {
			long temp = endValue;
			endValue = startValue;
			startValue = temp;
		}
		
		// 计算天数差
		long result = (endValue - startValue) / 1000 / 60 / 60 / 24;
		
		Calendar cal = Calendar.getInstance();
	
		cal.setTime(startDate);
		
		// 计算期间的每一天
		for (int index = 1; index < result; index++) {
			cal.add(Calendar.DATE, 1);
			dayList.add(cal.getTime());
		}
		
		return result;
	}
	
	
	public List<Date> getDayList() {
		return dayList;
	}


	public static void main(String args[]) {
		Calendar cal1 = Calendar.getInstance();
		
		// 2010/1/9
		cal1.set(Calendar.YEAR, 2010);
		cal1.set(Calendar.MONTH, 0);
		cal1.set(Calendar.DATE, 9);
		
		// 2010/1/29
		Calendar cal2 = Calendar.getInstance();
		cal2.set(Calendar.YEAR, 2010);
		cal2.set(Calendar.MONTH, 0);
		cal2.set(Calendar.DATE, 29);
		
		Date startDate = cal1.getTime();
		Date endDate = cal2.getTime();
		
		MyDate dateCal = new MyDate();
		
		System.out.println(dateCal.countDays(startDate,  endDate));
		
		List<Date> list = dateCal.getDayList();
		
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd EEE");
		
		for (Date date : list) {
			System.out.println(dateFormat.format(date));
		}
		
	}
}


简单。。。

呵呵,谢谢啦,
1 楼 rainsilence 2010-09-20  
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;


public class MyDate {
	
	private List<Date> dayList = new ArrayList<Date>();
	
	
	public long countDays(Date startDate, Date endDate) {
		
		long startValue = startDate.getTime();
		
		long endValue = endDate.getTime();
		
		if (startValue > endValue) {
			long temp = endValue;
			endValue = startValue;
			startValue = temp;
		}
		
		// 计算天数差
		long result = (endValue - startValue) / 1000 / 60 / 60 / 24;
		
		Calendar cal = Calendar.getInstance();
	
		cal.setTime(startDate);
		
		// 计算期间的每一天
		for (int index = 1; index < result; index++) {
			cal.add(Calendar.DATE, 1);
			dayList.add(cal.getTime());
		}
		
		return result;
	}
	
	
	public List<Date> getDayList() {
		return dayList;
	}


	public static void main(String args[]) {
		Calendar cal1 = Calendar.getInstance();
		
		// 2010/1/9
		cal1.set(Calendar.YEAR, 2010);
		cal1.set(Calendar.MONTH, 0);
		cal1.set(Calendar.DATE, 9);
		
		// 2010/1/29
		Calendar cal2 = Calendar.getInstance();
		cal2.set(Calendar.YEAR, 2010);
		cal2.set(Calendar.MONTH, 0);
		cal2.set(Calendar.DATE, 29);
		
		Date startDate = cal1.getTime();
		Date endDate = cal2.getTime();
		
		MyDate dateCal = new MyDate();
		
		System.out.println(dateCal.countDays(startDate,  endDate));
		
		List<Date> list = dateCal.getDayList();
		
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd EEE");
		
		for (Date date : list) {
			System.out.println(dateFormat.format(date));
		}
		
	}
}


简单。。。

相关推荐

    SQL Server 查询两个日期之间的所有月份

    接下来,通过`WHERE`子句过滤出在这个范围内的月份,并使用`AS [Date]`重命名列名为`Date`,这样结果集中就包含了起始日期和结束日期之间所有月份的月份值。 整个查询的目的是生成一个包含所有中间月份的列表,以便...

    java获取指定开始时间与结束时间之间的所有日期

    要实现Java获取指定开始时间与结束时间之间的所有日期,我们需要使用Java的日期和时间相关类,包括`java.text.SimpleDateFormat`和`java.util.Calendar`。下面是一个简单的示例代码: ```java import java.text....

    java计算两个日期之间的天数集合

    在给定的代码片段中,我们看到一个名为`getDate`的静态方法,该方法接收两个字符串参数`start`和`end`,分别代表开始日期和结束日期,格式为`"yyyy-MM-dd"`。此方法的主要功能是计算并返回这两个日期之间(包括开始...

    AS3指定的两个公历日期相差天数类库

    根据给定的信息,本文将详细解释一个用于计算两个公历日期之间相差天数的AS3类库,并深入探讨其实现细节和技术要点。 ### AS3指定的两个公历日期相差天数类库 #### 一、简介 在ActionScript 3(AS3)中,有时我们...

    python计算日期之间的放假日期

    #自动查询节日 给定起始日期和结束日期,自动获取总共的节假日天数 import datetime from dateutil import rrule,easter try: set except NameError: from sets import Set as set #复活节 def all_easter(start,...

    8.模拟数据生成设计1

    这表明了程序需要三个参数:数据存储的目录路径、模拟数据的起始日期和结束日期。数据将被生成并保存在指定的目录下。 2. **生成逻辑**: a) **随机数生成**:通过`Random.next(int range)`生成随机数,范围与应用...

    一元一次方程应用题精选.pdf

    4. 日语培训日期问题:已知培训期间8天的日期和为100,可以假设起始日为x,进而利用等差数列的求和公式来确定结束日期。 5. 王老师培训日期问题:王老师参加三天培训且日期相连,要求出具体日期。可以设定第一天为x...

    上机题目2

    从一个起始节点开始,逐步添加边,使得每次添加的边连接到已选节点集合中,同时保持当前生成树的权重最小。 5.3 Kruskal 算法 与Prim算法类似,Kruskal算法也是寻找最小生成树的算法,但它按照边的权重从小到大进行...

    常见的算法面试题

    1. 定义两个指针,low和high,分别指向数组的起始位置和结束位置。 2. 当low 时,执行以下操作: - 计算中间位置mid = (low + high) / 2。 - 比较数组中mid位置的元素与目标值target的关系。 - 如果相等,则返回...

    Informatica+PowerCenter+V8函数功能使用指南

    **应用场景**:适用于需要获取排序后最后一个元素的情况,如获取最新交易日期等。 #### 1.5 MAX(Dates) / 1.6 MAX(Numbers) **简介**:这两个函数分别用于获取最大日期和最大数值,是数据比较中非常重要的函数。 ...

Global site tag (gtag.js) - Google Analytics