我们将日期和时间存储为Date对象。
但是,后来我们需要能够确定Date对象是日期还是日期时间。
05/18/05 00:00:00和05/18:05都有小时/分钟部分。我无法真正区分它们。
如果您的日期时间不保证是在午夜,即它们从不具有00:00:00
的HH:mm:ss
,那么没有确定的方法可以区分刚好是午夜的“日期”和日期时间。
如果您的日期时间从不在午夜,则:
if (new SimpleDateFormat("HH:mm:ss").format(object).equals("00:00:00"))
如果要确定对象是否为"日期",可以执行以下操作。
我认为您的设计有缺陷,应该寻找其他解决方案。我也认为类的名称有缺陷,并引起了这种混淆。
"00:00:00".equals(new SimpleDateFormat("hh:mm:ss").format(object));
- rptmat57.format()
的返回值不能为null。是的,应该是HH:mm:ss
。 - Bohemianjava.util.Date实际上是一个时间点,而不是日期,因此无法仅将其用作日期。您需要想出一个不同的方法。
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) {
....
}
提示:我用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”的布尔成员变量。当您最初加载日期或日期时间值时,根据它是否为日期时间,将该布尔值设置为 true 或 false。