2011-05-17 22 views

回答

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时间,你可以做类似的事情。

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

这不起作用,因为日期如下存储 周四1月1 16点34分50秒GMT 1970年 – deltanovember 2011-05-17 13:22:47

+0

肯定。检查我的更新 – Bozho 2011-05-17 13:32:42

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 
} 
+0

HH(0-23),而不是hh(1-12) – Bozho 2011-05-17 12:52:34

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