我正在生成两个日期之间的所有日期。
public List<Date> generateRangeDates(Date firstDate, Date lastDate) {
List<Date> allDates = new ArrayList<Date>();
Calendar calendar = new GregorianCalendar();
calendar.setTime(firstDate);
while (calendar.getTime().before(lastDate)) {
Date resultado = calendar.getTime();
allDates .add(resultado);
calendar.add(Calendar.DATE, 1);
}
Date lastDate1 = allDates .get(dates.size()-1);
Calendar cal = new GregorianCalendar();
cal.setTime(lastDate1);
cal.add(Calendar.DATE, 1);
allDates .add(cal.getTime());
for(Date date1 : dates) {
System.out.println("All Dates : "+ date1);
}
return dates;
}
以上方法生成从第一个日期到最后一个日期的所有日期。我知道它有一个很大的缺点。就像我可以使用joda-time而不是java.util.Calendar。关于夏令时也存在模糊之处。它也没有提及TIMEZONE。还使用GregorianCalendar,它完全忽略了当前的Locale。 - 暂时 - 我不想使用JODA API。
帮助需要更新适用于所有TIMEZONES的上述功能。我在谷歌上搜索了很多,但也很困惑。
也是一个问题(可能听起来有点愚蠢) - 为什么人们坚持使用JODA API?它有什么含糊之处吗?
注意 - 这些行生成最后一个日期并添加到allDates列表中。
Date lastDate1 = allDates .get(dates.size()-1);
Calendar cal = new GregorianCalendar();
cal.setTime(lastDate1);
cal.add(Calendar.DATE, 1);
allDates .add(cal.getTime());
答案 0 :(得分:2)
有没有理由暂时不使用long
?如果你需要使用日期,你可以这样做。
日期与时区无关。
public List<Date> generateRangeDates(Date firstDate, Date lastDate) {
List<Date> dates = new ArrayList<Date>();
for(long t = firstDate.getTime(); t <= lastDate.getTime(); t += 24 * 60 * 60 * 1000)
dates.add(new Date(t));
return dates;
}
您无法创建一个完全独立于TimeZone的列表,因为Java中没有这样的数据结构。
其他人可能建议使用JODA的原因是它具有正确的日期(没有时间)对象,因为它与时区无关。