Java日期计算

Java日期计算,java,date,Java,Date,我有一个数据库字段,其中日期存储为DD/MM/YYYY格式。现在我想做的是看看今天的日期是否=存储的日期-1。基本上如果今天是结束日期的前一天。基于此,我将采取一些行动 格式示例: 10/02/2012 此处存在格式问题,因为我正在使用: Date todayDate; 存储的日期是VARCHAR2,单位为DB。我假设我必须将检索到的日期转换为日期常规格式,或者类似的格式。我们将不胜感激 更新: currentEndDate = rset.getString

我有一个数据库字段,其中日期存储为DD/MM/YYYY格式。现在我想做的是看看今天的日期是否=存储的日期-1。基本上如果今天是结束日期的前一天。基于此,我将采取一些行动

格式示例:

10/02/2012
此处存在格式问题,因为我正在使用:

Date todayDate;
存储的日期是VARCHAR2,单位为DB。我假设我必须将检索到的日期转换为日期常规格式,或者类似的格式。我们将不胜感激

更新:

                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。
谢谢,

您可以直接在数据库中使用
Date
类型,您可以直接将其作为java中的
Date
实例使用您可以直接在数据库中使用
Date
类型,您可以直接将其作为java中的
Date
实例使用您需要将字符串转换为日期。您可以在查询中或在获得字符串结果后执行此操作:

选项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);
然后您可以查看当前时间(
newdate()
)是否介于检索到的日期和该日期前一天之间。如果您想处理包括闰秒在内的所有转角情况,您必须使用
日历
,但如果您不介意省略闰秒,则只需从数据库日期中减去24*60*60*1000毫秒即可

您不能根据以下条件直接比较
日期
日历

…当且仅当getTime方法为两个对象返回相同的长值时,对象才相等

此外,
日历
也不起作用:

当且仅当参数是表示相同时间值的同一日历系统的日历对象时,结果才为真

简单的解决方案:使用
日历
getTime()
方法,返回一个
Date
对象,该对象将使用
equals()
after()
before()
与其他日期进行比较

或在代码中:

cal.add(Calendar.DAY, -1);
if(cal.getTime().equals(new Date())) { ... }

您还可以实例化另一个
日历
并使用其
设置时间()
,但这似乎效率较低。

您需要将字符串转换为日期。您可以在查询中或在获得字符串结果后执行此操作:

选项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);
然后您可以查看当前时间(
newdate()
)是否介于检索到的日期和该日期前一天之间。如果您想处理包括闰秒在内的所有转角情况,您必须使用
日历
,但如果您不介意省略闰秒,则只需从数据库日期中减去24*60*60*1000毫秒即可

您不能根据以下条件直接比较
日期
日历

…当且仅当getTime方法为两个对象返回相同的长值时,对象才相等

此外,
日历
也不起作用:

当且仅当参数是表示相同时间值的同一日历系统的日历对象时,结果才为真

简单的解决方案:使用
日历
getTime()
方法,返回一个
Date
对象,该对象将使用
equals()
after()
before()
与其他日期进行比较

或在代码中:

cal.add(Calendar.DAY, -1);
if(cal.getTime().equals(new Date())) { ... }

您还可以实例化另一个
日历
并使用其
设置时间()
,但这似乎效率较低。

与时间相关的JDBC类型有三种:

  • JDBC DATE类型表示由日、月和年组成的日期。SQL-92中定义了相应的SQL日期类型,但它仅由主要数据库的一个子集实现。有些数据库提供支持类似语义的替代SQL类型
  • JDBC TIME类型表示由小时、分钟和秒组成的时间。SQL-92中定义了相应的SQL时间类型,但它仅由主要数据库的一个子集实现。与DATE一样,一些数据库提供支持类似语义的可选SQL类型
  • JDBC TIMESTAMP类型表示日期加时间加纳秒字段。SQL-92中定义了相应的SQL时间戳类型,但它仅由极少数数据库实现 由于标准Java类
    Java.util.Date
    与这三种JDBC日期/时间类型中的任何一种都不完全匹配(它包括日期和时间信息,但没有纳秒),JDBC定义了
    Java.util.Date
    的三个子类来对应SQL类型。它们是:

  • java.sql.Date
    获取sql日期信息。java.util.Date基类的小时、分钟、秒和毫秒字段应设置为零。如果提供给java.sql.Date构造函数的毫秒数为负数,则驱动程序会将日期计算为1970年1月1日之前的毫秒数。否则,将按照1970年1月1日之后的指定毫秒数计算日期
  • java.sql.Time
    获取sql时间信息。java.util.Date基类的年、月和日字段设置为1970、一月和1。这是Java时代的“零”日期
  • java.sql.Timestamp
    获取sql时间戳信息。此类通过添加纳秒字段来扩展java.util.Date 所有三个JDBC时间相关类都是
    java.util.Date
    的子类,因此,它们可以在需要
    java.util.Date
    的地方使用。例如,国际化方法采用
    j