[英]How do I compare a raw time in Java?
例如,假設我有
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;
代碼不處理日期更改。 我不確定您是否要將23:00視為01:00之前或之后,但代碼認為兩次都在同一天,例如23:00在01:00之后。
在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 );
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.