如何在Java中比较原始时间?

4
例如,假设我有以下代码:
String endTime = "16:30:45";

我该如何确定现在是否在这个时间之前?
4个回答

15

首先,你需要解析这个:

SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss")
Date date = sdf.parse(endTime);

然后你可以使用日历来比较时间:

Calendar c = Calendar.getInstance();
c.setTime(date);
Calendar now = Calendar.getInstance();
if (now.get(Calendar.HOUR_OF_DAY) > c.get(Calendar.HOUR_OF_DAY) .. etc) { .. }

另外,您可以像now一样创建一个日历,然后使用新日历中的HOUR、MINUTE和SECOND字段来设置它的值。

使用joda-time库,您也可以实现类似的功能。

new DateMidnight().withHour(..).widthMinute(..).isBefore(new DateTime())

这不起作用的原因是日期存储如下:Thu Jan 01 16:34:50 GMT 1970 - deltanovember

2
SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss");

Date d1=df.parse(endTime);
Date d2=df.parse(startTime);

long d1Ms=d1.getTime();
long d2Ms=d2.getTime();

if(d1Ms < d2Ms)
{
   //doSomething
}
else
{
   // something else
}

1

由于Java没有内置对纯时间值的支持(只有组合的时间/日期值),因此您最好自己实现比较。如果时间格式为HH:mm:ss,则应该可以使用以下方法:

boolean beforeNow = 
    endTime.compareTo(
        new SimpleDateFormat("HH:mm:ss").format(new Date())) < 0;

代码没有处理时间变更。我不确定您是想将23:00视为01:00之前还是之后,但是该代码将两个时间都视为同一日期,例如,23:00在01:00之后。

0

本地时间

在Java 8及其java.time包之前,Java缺乏任何关于“本地时间”的概念。这意味着一种与日期和时区无关的时间。本地时间只是一种不与历史时间线相关联的一天中的某个时间点的概念。

Joda-Time库和Java 8中的java.time包都提供了LocalTime类。

时区

时区对于确定“现在”的本地时间至关重要。显然,在同一时刻,巴黎的“挂钟时间”与蒙特利尔的不同。

如果省略时区,则应用JVM的当前默认时区。最好明确指定,而不是隐式依赖于当前默认值。

Joda-Time

Joda-Time 2.7中的示例代码。

LocalTime then = new LocalTime( "16:30:45" );
Boolean isNowBefore = LocalTime.now( DateTimeZone.forID( "America/Montreal" ) ).isBefore( then );

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接