例如假设我有
String endTime = "16:30:45";
我如何确定现在是否在此之前?
答案 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 );