我有一个数据库字段,其中日期存储为DD / MM / YYYY格式。现在我要做的是看今天date =存储日期 - 1.基本上如果今天是结束日期的前一天。基于此,我将采取一些行动......
格式示例:
10/02/2012
这里有格式化问题,因为我使用了这个:
Date todayDate;
存储日期在DB中为VARCHAR2。我假设我必须将检索的日期转换为日期常规格式,或类似的东西。帮助将不胜感激。
更新
currentEndDate = rset.getString("ENDDATE");
endDate = (Date)formatter.parse(currentEndDate);
/*Check if end date = today date - 1*/
Calendar cal = Calendar.getInstance();
//set to end date
cal.setTime(endDate);
//end date - 1
cal.add(Calendar.DATE, -1);
Date today;
现在这就是我所拥有的......我正在尝试获取结束日期-1所以我使用add()函数做到了。现在如何检查结束日期 - 1 ==今天的日期?因为我试过的时候:
if(today.equals(cal.add(Calendar.date, -1)))
它表示从add函数返回void。 谢谢,
答案 0 :(得分:3)
有三种与时间相关的JDBC类型:
因为标准Java类java.util.Date
与这三种JDBC日期/时间类型中的任何一种都不完全匹配(它包括DATE和TIME信息但没有纳秒),JDBC定义了java.util.Date
的三个子类对应于SQL类型。他们是:
java.sql.Date
表示SQL DATE信息。 java.util.Date基类的小时,分钟,秒和毫秒字段应设置为零。如果提供给java.sql.Date构造函数的毫秒数为负数,则驱动程序将计算日期作为1970年1月1日之前的毫秒数。否则,日期将计算为1月1日后指定的毫秒数, 1970。java.sql.Time
获取SQL TIME信息。 java.util.Date基类的年,月和日字段设置为1970年,1月和1。这是Java纪元中的“零”日期。java.sql.Timestamp
获取SQL TIMESTAMP信息。此类通过添加纳秒字段来扩展java.util.Date。 所有三个与JDBC时间相关的类都是java.util.Date
的子类,因此,它们可以在需要java.util.Date
的地方使用。例如,国际化方法将java.util.Date
对象作为参数,因此可以传递任何与JDBC时间相关的类的实例。
JDBC Timestamp对象具有其父级的日期和时间组件以及单独的纳秒组件。如果在期望java.sql.Timestamp
对象的地方使用java.util.Date
对象,则纳秒组件将丢失。
但是,由于java.util.Date
对象的存储精度为1毫秒,因此在将java.sql.Timestamp
对象转换为java.util.Date
对象时可以保持这种精度。这是通过将纳秒组件中的纳秒转换为整秒(通过将纳秒数除以1,000,000)然后将结果添加到java.util.Date
对象来完成的。此转换中最多可能会丢失999,999纳秒,但生成的java.util.Date
对象将精确到1毫秒内。
以下代码片段是将java.sql.Timestamp
对象转换为精确到1毫秒内的java.util.Date
对象的示例。
Timestamp t = new Timestamp(98724573287540L);
java.util.Date d;
d = new java.util.Date(t.getTime() + (t.getNanos() / 1000000));
答案 1 :(得分:1)
您可以在数据库中直接使用Date
类型,您可以直接将其作为Date
实例在java中
答案 2 :(得分:1)
您需要将String转换为日期。您可以在查询中或在获得字符串结果后执行此操作:
选项1:在查询中将其变为日期类型:
SELECT TO_DATE("COLNAME", 'MM/DD/YYYY') FROM "MYTABLE"
选项2:获取字符串后将其转换为日期类型:
String date_from_db;
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
Date date = sdf.parse(date_from_db);
然后您可以查看当前时间(new Date()
)是否在检索日期和之前一天之间。如果你想要处理包括闰秒在内的所有极端情况,你将不得不使用Calendar
,但是如果你没有留下闰秒那么就可以减去24 * 60 * 60 *距离数据库日期1000毫秒。
根据API documentation,您无法直接比较Date
和Calendar
:
当且仅当getTime方法为两个返回相同的long值时,...对象才相等
此外,Calendar
的{{3}}无效:
当且仅当参数是表示相同时间值的同一日历系统的Calendar对象时,结果才为真
简单解决方案:使用Calendar
的{{1}}方法,该方法返回getTime()
对象,可以使用Date
,equals()
轻松与其他日期进行比较,和after()
。
或代码:
before()
您还可以实例化另一个cal.add(Calendar.DAY, -1);
if(cal.getTime().equals(new Date())) { ... }
并使用其Calendar
,但这似乎效率较低。