Java:最小和最大日期范围
我从一个具有存储日期值的数据库中获取一些数据,并让用户选择他们想要查看数据的日期范围。我所有用于获取这些日期范围的代码都可以工作,除了获取覆盖所有时间的日期范围的方法之外,该方法是从Java句柄的最早数据的起始值到最大可能日期的结束值 我的代码是否有问题,因为我看不到问题:Java:最小和最大日期范围,java,date,Java,Date,我从一个具有存储日期值的数据库中获取一些数据,并让用户选择他们想要查看数据的日期范围。我所有用于获取这些日期范围的代码都可以工作,除了获取覆盖所有时间的日期范围的方法之外,该方法是从Java句柄的最早数据的起始值到最大可能日期的结束值 我的代码是否有问题,因为我看不到问题: public static DateRange getAllTime() { /** * Get earliest possible */ Calendar
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;
}
为什么生活如此复杂?如果没有开始日期,请不要查询开始日期。如果没有结束日期,请不要查询结束日期。如果两者都没有,则根本不查询日期。代码对我有效,也许您不希望它返回值 开始时间:星期六太平洋标准时间1月1日00:00:00 完:星期三4月17日21:34:08太平洋标准时间292269054 (如果包含堆栈跟踪,会更容易提供帮助)为什么不使用
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
我认为这是对的。我想广告/商业广告只是被压制了。使用新日期(0)作为最小值的建议显然是错误的,因为新日期(-day)明显更小。我怀疑通过设置年份,然后分别为所有其他字段设置最大值,可能会出现溢出。这将使您的结束时间在开始时间附近,并导致所有记录被拒绝。您可以尝试打印日历时间,看看发生了什么 正如seanizer所指出的那样,您确实让这个问题变得比它应该的更复杂了——处理这个问题的正确方法是在查询中完全去掉date子句。这有时可能很困难,因为sql语句不是动态生成的。但是请注意,即使您不能在运行时修改sql,条件(在Oracle中)
如果提供的值为null并且填充了开始日期,则始终会感到满意。您的方法返回什么?哈哈,是的,这就是我最后要做的。这是一个特殊的案例,因为每个其他案例都有一些开始/结束,所以我只使用了一种方法。最后写了一个方法来涵盖这个案例,并写了一个没有检查日期的查询。也就是说,不知道会让我很烦,我真的很想知道为什么这不起作用。
新日期(Long.MIN_值)
不起作用,测试一下。它实际上并没有做你期望的事情。如果要使用此选项,请使用1970年1月1日的新日期(0)。@froginvasion我认为答案是正确的,字符串不包含BC/AD。我认为新日期(0)不会给出最小日期值。
start_date >= nvl(?, start_date)