2017-04-18 20 views
4

これはすでに尋ねられていると思われましたが、anythingが見つかりませんでした。ZonedDateTimeが「今日」であるかどうかを判断する方法は?

java.timeを使用すると、特定のZonedDateTimeが「今日」であるかどうかを判断する最良の方法は何ですか?

私は少なくとも2つの解決策を考え出しました。私は、これらのアプローチの抜け穴や落とし穴があるかどうかはわかりません。

/** 
* @param zonedDateTime a zoned date time to compare with "now". 
* @return true if zonedDateTime is "today". 
* Where today is defined as year, month, and day of month being equal. 
*/ 
public static boolean isZonedDateTimeToday1(ZonedDateTime zonedDateTime) { 
    ZonedDateTime now = ZonedDateTime.now(); 

    return now.getYear() == zonedDateTime.getYear() 
      && now.getMonth() == zonedDateTime.getMonth() 
      && now.getDayOfMonth() == zonedDateTime.getDayOfMonth(); 
} 


/** 
* @param zonedDateTime a zoned date time to compare with "now". 
* @return true if zonedDateTime is "today". 
* Where today is defined as atStartOfDay() being equal. 
*/ 
public static boolean isZoneDateTimeToday2(ZonedDateTime zonedDateTime) { 
    ZonedDateTime now = ZonedDateTime.now(); 
    LocalDateTime atStartOfToday = now.toLocalDate().atStartOfDay(); 

    LocalDateTime atStartOfDay = zonedDateTime.toLocalDate().atStartOfDay(); 

    return atStartOfDay == atStartOfToday; 
} 
+1

値のタイムゾーンで値が「今日」であるのか、JVMのデフォルトのタイムゾーンであるのかを尋ねていますか? – Andreas

+0

あなたはZonedDateTime now = ZonedDateTime.now()と言ってはいけません。今日の日付です。それはいつも今日のことです。 – Sedrick

+0

まず、「今日」の意味を明示してください! – slim

答えて

7

デフォルトのタイムゾーンで今日を意味する場合:

return zonedDateTime.toLocalDate().equals(LocalDate.now()); 

//you may want to clarify your intent by explicitly setting the time zone: 
return zonedDateTime.toLocalDate().equals(LocalDate.now(ZoneId.systemDefault())); 

あなたが同じ時間帯に、今日を意味する場合は、基本的な考え方はjava.timeフィギュア、それを出すと、任意の数学を自分自身をしないことですZonedDateTime:

return zonedDateTime.toLocalDate().equals(LocalDate.now(zonedDateTime.getZone())); 
+0

しかし、デフォルトのゾーンの 'now()'は、valueゾーンの日付と異なる日付になることがあります。 – Andreas

+0

@アンドレアスは速すぎます - ありがとう。 opの例でもデフォルトのタイムゾーンが使用されていると思います。 – assylias

+3

良いスタイルでは、最初のセクションで 'ZoneId.systemDefault()'を使うことをお勧めします。そうでなければ、それは間違いだったと推測して、 'ZonedDateTime'のゾーンを第2 1。 – JodaStephen

関連する問題