Java:最小和最大日期范围

标签 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;
    }

最佳答案

为什么不用

  1. 新日期(Long.MIN_VALUE)(公元前 292269055 年)
  2. 新日期(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/

相关文章:

java - 不兼容的类型将返回静态类型的泛型方法

java - 来自 Timestamp JPA 模型字段的 Primefaces 日历组件

r - 在 R 中将每月数据转换为每日数据

java - 如何在不使用预制类的情况下在 Java 中创建可扩展动态数组?

java - JPA 认为我正在删除一个分离的对象

java - 如何将 java.sql.Date 和 java.sql.Time 合并到 java.util.Date?

php - 将用户指定的日期和时间(使用 mktime 转换)调整为特定时区

javascript - 无法将日期解析为不同的格式

java - 将时间单位添加到 Joda DateTime 对象

java - 如何让 InputVerifier 与可编辑的 JComboBox 一起工作