我们将日期和日期时间存储为Date对象。
但是,在后期,我们需要能够判断Date对象是日期还是日期时间。
05/18/05 00:00:00和05/18:05都有小时/分钟部分。我无法区分它们。
答案 0 :(得分:7)
除非您的约会时间保证不在午夜,即他们永远不会HH:mm:ss
00:00:00
,否则没有可靠的方法来说明恰好在午夜时分的“约会”和日期时间。
如果你的约会时间永远不会在午夜,那么:
if (new SimpleDateFormat("HH:mm:ss").format(object).equals("00:00:00"))
将确定Date
对象是否为“日期”。
我认为您的设计存在缺陷,您应该找到另一种解决方案。我还认为Date
类的名称存在缺陷并导致这种混淆。
答案 1 :(得分:4)
事实上,java.util.Date是一个时间点,而不是日期,因此无法仅将其用作日期。你需要提出一个不同的方法。
答案 2 :(得分:3)
使用Apache commons-lang-3:
DateUtils.truncate(fecha, Calendar.DAY_OF_MONTH).equals(fecha)
答案 3 :(得分:1)
无需解析,格式化或第三方库。 你可以轻松地做到:
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对象做这件事并且似乎不会危及性能,但当然都取决于你想要做到这一点的地点和原因
答案 4 :(得分:0)
您可以使用Google's 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...
}
答案 5 :(得分:0)
我知道您实际上正在处理从JDBC java.sql.Date
获取的java.sql.Timestamp
和ResultSet
实例,而它们是针对超类java.util.Date
声明的,对吗? / p>
在这种情况下,只需使用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).
}
答案 6 :(得分:0)
虽然我同意这里发布的有关修改原始时间值的解决方案,看看它是否有时间部分,正如Dmitri所说,但缺点是,如果Date
值的时间部分恰好是午夜,没有办法说出来。
所以,在这里思考一下,你可以创建自己的类,扩展Date
,它有一个名为“isDateTime”的成员变量boolean。然后,当您最初加载日期或日期时间值时,将该布尔值设置为true或false,具体取决于它是否为日期时间。