[英]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()
来获取当前时间...然后您可以将它们与compareTo
或isBefore
和isAfter
。
使用Joda Time而不是内置的Date
/ Calendar
类将为您提供更易读的代码。
java.util.Date
类是您需要的错误类型。 该类代表一个日期加上一个时间,而您只想要一个时间。 在与早期版本的Java捆绑在一起的旧日期时间类中, 没有一个类可以真正表示时间值。 java.sql.Time
类假装这样做但是是一个hack。
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
以查找当天晚些时候的第一个项目而不是您的采样时间。 要进行比较,请使用isAfter
, isBefore
或equals
方法。
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.