有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!


共 (6) 个答案

  1. # 1 楼答案

    另一种选择

    min.getTime() <= d.getTime() && d.getTime() <= max.getTime()
    
  2. # 2 楼答案

    如果您不知道最小值/最大值的顺序

    Date a, b;   // assume these are set to something
    Date d;      // the date in question
    
    return a.compareTo(d) * d.compareTo(b) > 0;
    

    如果希望范围是包含的

    return a.compareTo(d) * d.compareTo(b) >= 0;
    

    您可以将null视为不受约束

    if (a == null) {
        return b == null || d.compareTo(b) < 0;
    } else if (b == null) {
        return a.compareTo(d) < 0;
    } else {
        return a.compareTo(d) * d.compareTo(b) > 0;
    }
    
  3. # 3 楼答案

    像这样:

    Date min, max;   // assume these are set to something
    Date d;          // the date in question
    
    return d.compareTo(min) >= 0 && d.compareTo(max) <= 0;
    

    您可以使用>而不是>=<而不是<=将端点从“之间”的意义上排除

  4. # 4 楼答案

    这可能更具可读性:

    Date min, max;   // assume these are set to something
    Date d;          // the date in question
    
    return d.after(min) && d.before(max);
    
  5. # 5 楼答案

    下面是使用Joda-Time2.3库实现这一点的几种方法

    一种方法是在DateTime实例上使用简单的isBeforeisAfter方法。顺便说一下,Joda Time中的DateTime在概念上类似于java。util。日期(宇宙时间线上的一个时刻),但包括一个时区

    另一种方法是在Joda时间内建立一个间隔。contains方法测试给定的日期时间是否发生在间隔覆盖的时间范围内。间隔的开始是包含的,但端点是独占的。这种方法被称为“半开放”,象征着[)

    请参见以下代码示例中的两种方法

    转换java语言。util。日期实例到Joda时间^{}实例。只需将Date实例传递给DateTime的构造函数。实际上,您还应该传递一个特定的^{}对象,而不是依赖JVM的默认时区

    DateTime dateTime1 = new DateTime( new java.util.Date() ).minusWeeks( 1 );
    DateTime dateTime2 = new DateTime( new java.util.Date() );
    DateTime dateTime3 = new DateTime( new java.util.Date() ).plusWeeks( 1 );
    

    通过测试在…之前/之后进行比较

    boolean is1After2 = dateTime1.isAfter( dateTime2 );
    boolean is2Before3 = dateTime2.isBefore( dateTime3 );
    
    boolean is2Between1And3 = ( ( dateTime2.isAfter( dateTime1 ) ) && ( dateTime2.isBefore( dateTime3 ) ) );
    

    使用间隔方法而不是isAfter/isBefore

    Interval interval = new Interval( dateTime1, dateTime3 );
    boolean intervalContainsDateTime2 = interval.contains( dateTime2 );
    

    转储到控制台

    System.out.println( "DateTimes: " + dateTime1 + " " + dateTime1 + " " + dateTime1 );
    System.out.println( "is1After2 " + is1After2 );
    System.out.println( "is2Before3 " + is2Before3 );
    System.out.println( "is2Between1And3 " + is2Between1And3 );
    System.out.println( "intervalContainsDateTime2 " + intervalContainsDateTime2 );
    

    当运行时

    DateTimes: 2014-01-22T20:26:14.955-08:00 2014-01-22T20:26:14.955-08:00 2014-01-22T20:26:14.955-08:00
    is1After2 false
    is2Before3 true
    is2Between1And3 true
    intervalContainsDateTime2 true
    
  6. # 6 楼答案

    日期之间(包括结束点)可以写为

    public static boolean isDateInBetweenIncludingEndPoints(final Date min, final Date max, final Date date){
        return !(date.before(min) || date.after(max));
    }
    

    注意:正如@Ponmudi在评论中指出的,如果日期在毫秒级不同,这个解决方案可能不起作用