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

时间:2011-05-17 12:41:11

标签: java time

例如假设我有

String endTime = "16:30:45";

我如何确定现在是否在此之前?

4 个答案:

答案 0 :(得分: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())

答案 1 :(得分: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
}

答案 2 :(得分: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之后。

答案 3 :(得分:0)

当地时间

在Java 8及其java.time包之前,Java缺乏任何“本地时间”的概念。这意味着从任何日期和任何时区分离出的时间。当地时间只是时间的概念,而不是与历史的时间线相关联。

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

时区

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

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

约达时间

Joda-Time 2.7。

中的示例代码
LocalTime then = new LocalTime( "16:30:45" );
Boolean isNowBefore = LocalTime.now( DateTimeZone.forID( "America/Montreal" ) ).isBefore( then );