Java日期计算
我有一个数据库字段,日期存储为DD/MM/YYYY格式。现在我想要做的是看看今天是否=存储日期 - 1.基本上如果今天是结束日期前一天。在此基础上,我会做一些动作......格式的Java日期计算
例如:因为现在用这个
10/02/2012
有格式化的问题在这里:
Date todayDate;
而且保存的日期是在VARCHAR2 D B。假设我必须将检索到的日期转换为Date常规格式,或类似的东西。帮助将不胜感激。
更新:
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;
现在,这是我have..I我试图在这里得到的结束日期-1,所以我这样做,使用add()函数。现在我怎样才能检查结束日期 - 1 ==今天的日期?因为当我尝试时:
if(today.equals(cal.add(Calendar.date, -1)))
它说无效返回从add函数。 谢谢,
这直接为Date
例如你需要把字符串转换成日期。你可以在你的查询做,或者你得到的字符串结果后:
选项1:把它变成一个Date类型在您的查询:
SELECT TO_DATE("COLNAME", 'MM/DD/YYYY') FROM "MYTABLE"
选项2:之后,你把它变成一个Date类型得到字符串:
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毫秒即可你的数据库日期。
你不能直接比较一个Date
和Calendar
为每API documentation:
...对象是相等的,当且仅当getTime方法返回两个
也同样长的值,Calendar
的equals()
将不起作用:
结果为真当且仅当参数是相同的日历系统的日历对象,它表示同一时间值
简单的解决方案:使用Calendar
的getTime()
方法,它返回一个Date
对象WH ich将随时与使用equals()
,after()
和before()
的其他日期进行比较。
或者代码:
cal.add(Calendar.DAY, -1);
if(cal.getTime().equals(new Date())) { ... }
你也可以实例化另一个Calendar
并使用其setTime()
,但似乎效率不高。
您可以直接在你的数据库使用Date
类型,你可以在Java
有涉及三个时间JDBC类型:
- 的JDBC DATE类型的代表包括日,月,年的日期。相应的SQL DATE类型在SQL-92中定义,但它仅由主要数据库的一个子集实现。一些数据库提供了支持相似语义的备选SQL类型。
- JDBC TIME类型表示由小时,分钟和秒组成的时间。相应的SQL TIME类型在SQL-92中定义,但它仅由主要数据库的一个子集实现。和DATE一样,一些数据库提供了支持相似语义的替代SQL类型。
- JDBC TIMESTAMP类型表示DATE加TIME加纳秒字段。 SQL-92中定义了相应的SQL TIMESTAMP类型,但它仅由极少数的数据库实现。
由于标准的Java类java.util.Date
不匹配任何恰好这三个JDBC日期/时间类型的(它包括日期和时间信息,但没有毫微秒),JDBC定义的java.util.Date
三个子类,以对应于SQL类型。它们是:
-
java.sql.Date
为SQL DATE信息。 java.util.Date基类的小时,分钟,秒和毫秒字段应设置为零。如果提供给java.sql.Date构造函数的毫秒数为负数,那么驱动程序将计算该日期为1970年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
对象将精确到毫秒。
以下代码片段是将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));
哇这是详细和良好的...谢谢队友:) – 2012-02-27 05:41:42
感谢mate..this将在这里进行一些修改工作,并有 – 2012-02-27 05:41:23
@sys_debug我已经编辑我的答案来解决您的次要问题。您可能还想将'today'实例化为'new Date()'。 – bdares 2012-02-28 12:29:55
感谢队友再次支持 – 2012-02-29 04:56:58