如何判断java.util.Date对象是否包含时间部分?

时间:2012-02-17 19:29:29

标签: java

我们将日期和日期时间存储为Date对象。

但是,在后期,我们需要能够判断Date对象是日期还是日期时间。

05/18/05 00:00:00和05/18:05都有小时/分钟部分。我无法区分它们。

7 个答案:

答案 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.TimestampResultSet实例,而它们是针对超类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,具体取决于它是否为日期时间。