Java:最小和最大日期范围

Chr*_*rry 5 java date

我从具有存储日期值的数据库中获取一些数据,并且我让用户选择他们想要查看数据的日期范围.我获取这些日期范围的所有代码都有效,除了获取所有时间的日期范围的方法,这是最早可能的数据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;
    }
Run Code Online (Sandbox Code Playgroud)

emo*_*ory 17

为什么不用

  1. 新日期(Long.MIN_VALUE)(公元前292269055年)
  2. 新日期(Long.MAX_VALUE)(公元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));
Run Code Online (Sandbox Code Playgroud)

给我

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
Run Code Online (Sandbox Code Playgroud)

我认为这是对的.我假设AD/BC正被压制.使用新Date(0)作为最小值的建议显然是错误的,因为新的Date(-day)明显更小.

  • @froginvasion我认为答案是正确的,字符串不包含BC/AD.我不认为新的Date(0)会给你最小的日期值. (2认同)

Sea*_*oyd 5

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