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毫秒即可你的数据库日期。

你不能直接比较一个DateCalendar为每API documentation

...对象是相等的,当且仅当getTime方法返回两个

也同样长的值,Calendarequals()将不起作用:

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

简单的解决方案:使用CalendargetTime()方法,它返回一个Date对象WH ich将随时与使用equals(),after()before()的其他日期进行比较。

或者代码:

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

你也可以实例化另一个Calendar并使用其setTime(),但似乎效率不高。

+0

感谢mate..this将在这里进行一些修改工作,并有 – 2012-02-27 05:41:23

+0

@sys_debug我已经编辑我的答案来解决您的次要问题。您可能还想将'today'实例化为'new Date()'。 – bdares 2012-02-28 12:29:55

+0

感谢队友再次支持 – 2012-02-29 04:56:58

您可以直接在你的数据库使用Date类型,你可以在Java

有涉及三个时间JDBC类型:

  1. JDBC DATE类型的代表包括日,月,年的日期。相应的SQL DATE类型在SQL-92中定义,但它仅由主要数据库的一个子集实现。一些数据库提供了支持相似语义的备选SQL类型。
  2. JDBC TIME类型表示由小时,分钟和秒组成的时间。相应的SQL TIME类型在SQL-92中定义,但它仅由主要数据库的一个子集实现。和DATE一样,一些数据库提供了支持相似语义的替代SQL类型。
  3. JDBC TIMESTAMP类型表示DATE加TIME加纳秒字段。 SQL-92中定义了相应的SQL TIMESTAMP类型,但它仅由极少数的数据库实现。

由于标准的Java类java.util.Date不匹配任何恰好这三个JDBC日期/时间类型的(它包括日期和时间信息,但没有毫微秒),JDBC定义的java.util.Date三个子类,以对应于SQL类型。它们是:

  1. java.sql.Date为SQL DATE信息。 java.util.Date基类的小时,分​​钟,秒和毫秒字段应设置为零。如果提供给java.sql.Date构造函数的毫秒数为负数,那么驱动程序将计算该日期为1970年1月1日之前的毫秒数。否则,该日期将计算为指定的毫秒数, 1970.
  2. java.sql.Time SQL TIME信息。 java.util.Date基类的年,月和日字段设置为1970年1月和1日。这是Java时期的“零”日期。
  3. 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)); 
+0

哇这是详细和良好的...谢谢队友:) – 2012-02-27 05:41:42