![](/img/trans.png)
[英]How to tell if an existing java.util.Date matches a particular format
[英]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.Date
和java.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.