繁体   English   中英

java日期时间比较两个

[英]java date time compare two

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

现在我有一些时间像

10.00,12.00,2.00,4.00

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

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

Date date = new Date();

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");
}

我会用Joda Time 为您感兴趣的每个时间创建一个LocalTime ,只需要new LocalTime()来获取当前时间...然后您可以将它们与compareToisBeforeisAfter

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

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

java.time

java.time框架内置于Java 8及更高版本中。 请参阅Oracle教程 这些课程的灵感来自非常成功的Joda-Time图书馆。 大部分java.time功能都被后端移植到Jave 6和7,并进一步适应了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.

或者获取当前时间。 根据JVM 当前的默认时区指定时区比隐式更可靠。

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 ( … }

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());
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM