簡體   English   中英

如何比較Java中的原始時間?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM