java日期时间比较两个

时间:2010-11-28 13:25:08

标签: java date

在java中比较两个日期的最佳方法是什么?

现在我有一些时间像

10.00,12.00,2.00,4.00

与计算机时间相比,我们怎样才能找出接下来的时间?

现在我说我的电脑时间是3.15,我该怎么办才能显示4.00呢?

Date date = new Date();

4 个答案:

答案 0 :(得分:12)

java.util.Date实现Comparable接口。这意味着您可以非常轻松地将两个日期对象与以下代码进行比较:

if (date1.compareTo(date2) < 0)
{
        System.out.println("date1 is before date2");
}
else if (date1.compareTo(date2) > 0)
{
    System.out.println("date1 is after date2");
}
else
{
    System.out.println("date1 is equal to date2");
}

答案 1 :(得分:5)

我会使用Joda Time。为您感兴趣的每一次创建LocalTime,只需new LocalTime()即可获得当前时间...然后您可以将它们与compareTo或{{进行比较1}}和isBefore

使用Joda Time而不是内置的isAfter / Date类将为您提供更易读的代码。

答案 2 :(得分:0)

JodaTime似乎是这些问题的标准答案,但我还没有时间(没有双关语)还要查看Joda,所以这是我的日历建议:

public static String getNextHour() {
    Calendar c = new GregorianCalendar();
    int minsLeft = 60 - c.get(Calendar.MINUTE);
    c.add(Calendar.MINUTE, minsLeft);

    SimpleDateFormat sdf = new SimpleDateFormat("h:mm");
    return sdf.format(c.getTime());
}

答案 3 :(得分:0)

java.util.Date类是您的需求的错误类型。该类代表日期加上一个时间段,而您只想要一个时间。在与早期版本的Java捆绑在一起的旧日期时间类中,有 no 类来真正表示时间值。 java.sql.Time班假装这样做但是是黑客。

java.time

java.time框架内置于Java 8及更高版本中。见Oracle Tutorial。这些课程的灵感来自非常成功的Joda-Time库。 java.time的大部分功能是back-ported to Jave 6 & 7,还有adapted to Android。这些类取代了旧的日期时间类; 浩大的改进。

LocalTime类代表没有日期且没有时区的时间。

使用排序的集合(例如List)来整理您的值。

List<LocalTime> times = new ArrayList<>( 4 );
times.add( LocalTime.of( 10 , 0 );
times.add( LocalTime.of( 12 , 0 );
times.add( LocalTime.of( 14 , 0 );
times.add( LocalTime.of( 16 , 0 );

确定您的样本时间进行比较。

LocalTime sample = LocalTime.of( 15 , 15 ); // Quarter-hour past 3 in the afternoon.

或者获取当前时间。 Specify a time zone因为根据您的JVM current default time zone,它比隐式更可靠。

ZoneId zoneId = ZoneId.of( "America/Montreal" );
LocalTime sample = LocalTime.now( zoneId );

循环List以查找当天晚些时候的第一个项目,而不是您的采样时间。要进行比较,请使用isAfterisBeforeequals方法。

LocalTime hit = null;
for ( LocalTime time : times ) {
    if ( time.isAfter( sample ) ) {
        hit = time;
        break; // Bail-out of this FOR loop.
    }
}
// Test if 'hit' is still null, meaning no appropriate value found.
if ( null == hit ) { … } else ( … }