我正在从具有存储日期值的数据库中获取一些数据,并让用户选择他们想要查看数据的日期范围。我获取这些日期范围的所有代码都有效,除了获取涵盖所有时间的日期范围的方法,这将是 Java 处理的最早可能数据的起始值,到最大可能日期的结束值。
我的代码有问题吗,因为我看不出问题:
public static DateRange getAllTime() {
/**
* Get earliest possible
*/
Calendar c = Calendar.getInstance();
c.set(
c.getActualMinimum(Calendar.YEAR),
c.getActualMinimum(Calendar.MONTH),
c.getActualMinimum(Calendar.DAY_OF_MONTH),
c.getActualMinimum(Calendar.HOUR),
c.getActualMinimum(Calendar.MINUTE),
c.getActualMinimum(Calendar.SECOND)
);
c.set(Calendar.MILLISECOND, c.getActualMinimum(Calendar.MILLISECOND));
Date start = c.getTime();
/**
* Get latest possible date
*/
c.set(
c.getActualMaximum(Calendar.YEAR),
c.getActualMaximum(Calendar.MONTH),
c.getActualMaximum(Calendar.DAY_OF_MONTH),
c.getActualMaximum(Calendar.HOUR),
c.getActualMaximum(Calendar.MINUTE),
c.getActualMaximum(Calendar.SECOND)
);
c.set(Calendar.MILLISECOND, c.getActualMaximum(Calendar.MILLISECOND));
Date end = c.getTime();
DateRange range = new DateRange();
range.Start = start;
range.End = end;
return range;
}
最佳答案
为什么不用
- 新日期(Long.MIN_VALUE)(公元前 292269055 年)
- 新日期(Long.MAX_VALUE)(公元 292278994 年)?
由于 froginvasion 质疑答案,我想我会仔细检查
long day=1000*60*60*24;
System.out.println(new Date(Long.MAX_VALUE-day));
System.out.println(new Date(Long.MAX_VALUE));
System.out.println(new Date(0));
System.out.println(new Date(-day));
System.out.println(new Date(Long.MIN_VALUE));
System.out.println(new Date(Long.MIN_VALUE+day));
给我
Sat Aug 16 07:12:55 GMT 292278994
Sun Aug 17 07:12:55 GMT 292278994
Thu Jan 01 00:00:00 GMT 1970
Wed Dec 31 00:00:00 GMT 1969
Sun Dec 02 16:47:04 GMT 292269055
Mon Dec 03 16:47:04 GMT 292269055
我觉得是对的。我假设 AD/BC 只是被压制了。使用 new Date(0) 作为最小值的建议显然是错误的,因为 new Date(-day) 显然更小。
关于Java:最小和最大日期范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3598091/