簡體   English   中英

如何判斷java.util.Date對象是否包含時間部分?

[英]How to tell if the java.util.Date object contains the time portion?

我們將日期和日期時間存儲為Date對象。

但是,在后期,我們需要能夠判斷Date對象是日期還是日期時間。

05/18/05 00:00:00和05/18:05都有小時/分鍾部分。 我無法區分它們。

除非您的日期時間保證不在午夜,即他們永遠不會有HH:mm:ss 00:00:00 ,否則沒有可靠的方法來說明恰好在午夜時分的“日期”和日期時間。

如果你的約會時間永遠不會在午夜,那么:

if (new SimpleDateFormat("HH:mm:ss").format(object).equals("00:00:00"))

將確定Date對象是否為“日期”。

我認為你的設計存在缺陷,你應該找到另一個解決方案。 我也認為Date類的名稱存在缺陷並導致這種混淆。

事實上,java.util.Date是一個時間點,而不是日期,因此無法僅將其用作日期。 你需要提出一個不同的方法。

使用Apache commons-lang-3:

DateUtils.truncate(fecha, Calendar.DAY_OF_MONTH).equals(fecha)

無需解析,格式化或第三方庫。 你可以輕松地做到:

Calendar c = ...
c.setTime(date);
//this doesn't care about nanos
if(c.get(Calendar.HOUR_OF_DAY) + c.get(Calendar.MINUTE) + c.get(Calendar.SECOND) > 0) {
....
}

PD:我用1000-25.000對象做這件事並且似乎沒有危及性能,但當然都取決於你想要做到這一點的地點和原因

您可以使用Google的DateTime庫進行驗證。

它有parseDateTime和parseDate方法,如果它們格式不正確,將拋出NumberFormatException。

然后,你可以......

try {
   DateTime someVar = DateTime.parseDate("your_date_as_a_string");
} catch (java.lang.NumberFormatException nfe) {
  // This isn't a date...
}

try {
   DateTime someVar = DateTime.parseDateTime("your_date_as_a_string");
} catch (java.lang.NumberFormatException nfe) {
  // This isn't a date/time...
}

我知道你實際上正在處理從JDBC ResultSet java.sql.Datejava.sql.Timestamp實例,而它們是針對它們的超類java.util.Date聲明的,對吧?

在這種情況下,只需使用instanceof

if (date instanceof java.sql.Date) {
    // It was originally a DATE.
} else if (date instanceof java.sql.Timestamp) {
    // It was originally a TIMESTAMP (DATETIME).
}

雖然我同意這里發布的有關修改原始時間值的解決方案,看它是否有時間部分,正如Dmitri所說,但缺點是,如果Date值的時間部分恰好是午夜時間,那么就沒有辦法說出來了。

所以,在這里想一點橫向,你可以創建自己的類,擴展Date ,它有一個名為“isDateTime”的成員變量boolean。 然后,當您最初加載日期或日期時間值時,將該布爾值設置為true或false,具體取決於它是否為datetime。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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