例如,假设我有以下代码:
我该如何确定现在是否在这个时间之前?
String endTime = "16:30:45";
我该如何确定现在是否在这个时间之前?
首先,你需要解析这个:
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())
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
}
由于Java没有内置对纯时间值的支持(只有组合的时间/日期值),因此您最好自己实现比较。如果时间格式为HH:mm:ss,则应该可以使用以下方法:
boolean beforeNow =
endTime.compareTo(
new SimpleDateFormat("HH:mm:ss").format(new Date())) < 0;
在Java 8及其java.time包之前,Java缺乏任何关于“本地时间”的概念。这意味着一种与日期和时区无关的时间。本地时间只是一种不与历史时间线相关联的一天中的某个时间点的概念。
Joda-Time库和Java 8中的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 );