Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:最小和最大日期范围_Java_Date - Fatal编程技术网

Java:最小和最大日期范围

Java:最小和最大日期范围,java,date,Java,Date,我从一个具有存储日期值的数据库中获取一些数据,并让用户选择他们想要查看数据的日期范围。我所有用于获取这些日期范围的代码都可以工作,除了获取覆盖所有时间的日期范围的方法之外,该方法是从Java句柄的最早数据的起始值到最大可能日期的结束值 我的代码是否有问题,因为我看不到问题: public static DateRange getAllTime() { /** * Get earliest possible */ Calendar

我从一个具有存储日期值的数据库中获取一些数据,并让用户选择他们想要查看数据的日期范围。我所有用于获取这些日期范围的代码都可以工作,除了获取覆盖所有时间的日期范围的方法之外,该方法是从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;
    }

为什么生活如此复杂?如果没有开始日期,请不要查询开始日期。如果没有结束日期,请不要查询结束日期。如果两者都没有,则根本不查询日期。

代码对我有效,也许您不希望它返回值

开始时间:星期六太平洋标准时间1月1日00:00:00 完:星期三4月17日21:34:08太平洋标准时间292269054

(如果包含堆栈跟踪,会更容易提供帮助)

为什么不使用

  • 新日期(长最小值)(公元前292269055年)
  • 新日期(长期最大值)(公元292278994年)
  • 既然弗罗金瓦森质疑这个答案,我想我应该再核实一下

        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)