在java中比较两个日期的最佳方法是什么?
现在我有一些时间像
10.00,12.00,2.00,4.00
与计算机时间相比,我们怎样才能找出接下来的时间?
现在我说我的电脑时间是3.15,我该怎么办才能显示4.00呢?
Date date = new Date();
答案 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 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
以查找当天晚些时候的第一个项目,而不是您的采样时间。要进行比较,请使用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 ( … }