如何获得java中两个日期之间的天数?
可能重复:
Calculating the Difference Between Two Java Date Instances如何获得java中两个日期之间的天数?
我如何在Java中两个日期之间的天数?
最好的方法是什么?下面是我得到了什么,但它不是最好的:
public static ConcurrentHashMap<String, String> getWorkingDaysMap(int year,
int month, int day){
int totalworkingdays=0,noofdays=0;
String nameofday = "";
ConcurrentHashMap<String,String> workingDaysMap =
new ConcurrentHashMap<String,String>();
Map<String,String> holyDayMap = new LinkedHashMap<String,String>();
noofdays = findNoOfDays(year,month,day);
for (int i = 1; i <= noofdays; i++) {
Date date = (new GregorianCalendar(year,month - 1, i)).getTime();
// year,month,day
SimpleDateFormat f = new SimpleDateFormat("EEEE");
nameofday = f.format(date);
String daystr="";
String monthstr="";
if(i<10)daystr="0";
if(month<10)monthstr="0";
String formatedDate = daystr+i+"/"+monthstr+month+"/"+year;
if(!(nameofday.equals("Saturday") || nameofday.equals("Sunday"))){
workingDaysMap.put(formatedDate,formatedDate);
totalworkingdays++;
}
}
return workingDaysMap;
}
public static int findNoOfDays(int year, int month, int day) {
Calendar calendar = Calendar.getInstance();
calendar.set(year, month - 1, day);
int days = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
return days;
}
我平时做这样的事情:
final long DAY_IN_MILLIS = 1000 * 60 * 60 * 24;
int diffInDays = (int) ((date1.getTime() - date2.getTime())/ DAY_IN_MILLIS);
无需外部lib和很容易
更新:刚刚看到你也想要“日期”,类似的方法适用:
//assume date1 < date2
List<Date> dateList = new LinkedList<Date>();
for (long t = date1.getTime(); t < date2.getTime() ; t += DAY_IN_MILLIS) {
dateList.add(new Date(t));
}
当然,使用JODA时间或其他的lib可以使您的生活更容易一点,但我没有看到困难的电流的方式来实现
更新:重要提示! 这只适用于没有夏令时或类似调整的时区,或者您对“天数差异”的定义其实意味着“以24小时为单位的差异”
仅提醒使用此方法的人员,这仅适用于没有夏令时或类似调整的时区。 –
我回滚了原来的答案,因为对这个答案所作的编辑添加了一些不属于我原始答案的内容(提及'TimeUnit.MILLISECONDS.toDays(date1.getTime() - date2.getTime() );')我认为这样的编辑更适合作为另一个答案,而不是改变另一个人的现有答案。 –
您的第一条评论非常重要。如果在夏令时期间发生“日期1”而在非夏令时发生“日期2”,则此方法会给出错误答案。因此,任何有夏时制的国家都是错误的。 –
特别是,这个答案:http://stackoverflow.com/a/4549327/22656 –