2013-04-18 62 views
0

我有一個包含一個字段的Oracle數據庫W_PLANNED_DATE: 19/03/2013 10:55:00 (Date)Java.util.Date VS Java.sql.Date - 日期值不同

在Java中,我把這個值到一個變量:

Date dteBeginOrWaitingItem = orWaitinglist.getWPlannedDate(); 

value: 2013-03-19 

現在,我的時間到底發生了什麼?我需要這個來填充primefaces的schedulecomponent。 我怎樣才能得到一個完整的日期和時間值

eventResourceAvailPerDay.addEvent(new DefaultScheduleEvent(reason, dteBeginOrWaitingItem, dteEndOrWaitingItem, "waitingitem")); 

這種方法使事件在12:00 PM因爲沒有其它的時間或僅僅是00:00:00

我知道如何使用日曆類,但它只是讓我設置日期,時間似乎是空的,但在數據庫視圖中我有一個日期時間值。

爲myBean

import java.util.Date; 
@ManagedBean(name="scheduleController") 
@SessionScoped 
public class ScheduleController implements Serializable { 

private Date dteBeginOrWaitingItem, dteEndOrWaitingItem; 

//methods 
try 
    { 
     //eventWaitinglist.clear(); 
     OrWaitinglistDao orWaitinglistDao = new OrWaitinglistDaoImpl(); 
     waitingEvents = orWaitinglistDao.getOrWaitinglistKeysByResource(rKey); 
     int i = 0; 
     Iterator<OrWaitinglist> it2 = waitingEvents.iterator(); 
     while (it2.hasNext()) 
     { 
      orWaitinglist = it2.next(); 
      dteBeginOrWaitingItem = (Date) orWaitinglist.getWPlannedDate(); 
      dteEndOrWaitingItem = orWaitinglist.getWPlannedDate(); 
      //dteEndOrWaitingItem = orWaitinglist.getWPlannedDate(); 
      reason = orWaitinglist.getWDescription(); 
      eventResourceAvailPerDay.addEvent(new DefaultScheduleEvent(reason, dteBeginOrWaitingItem, dteEndOrWaitingItem, "waitingitem")); 

      i += 1; 
      System.out.println("EventWaiting: " + i + " " + dteBeginOrWaitingItem + " " + dteEndOrWaitingItem + " " + reason); 
     } 
    } 
    catch(java.util.EmptyStackException Ex) 
    { 
     System.out.println(Ex.getMessage()); 
    } 

WORKING UPDATE: 豆:

try 
    { 
     //eventWaitinglist.clear(); 
     OrWaitinglistDao orWaitinglistDao = new OrWaitinglistDaoImpl(); 
     waitingEvents = orWaitinglistDao.getOrWaitinglistKeysByResource(rKey); 
     int i = 0; 
     Iterator<OrWaitinglist> it2 = waitingEvents.iterator(); 
     while (it2.hasNext()) 
     { 
      orWaitinglist = it2.next(); 
      Long wPlannedDate = orWaitinglist.getWPlannedDate().getTime(); 
      if (wPlannedDate != 0) { 
       Date wPlannedDateConverted = new Date(wPlannedDate); 
       dteBeginOrWaitingItem = convertDate(0, 0, wPlannedDateConverted); 
       dteEndOrWaitingItem = convertDate(orWaitinglist.getWDuration().intValue(), orWaitinglist.getWAdditionalTime().intValue(), wPlannedDateConverted); 
      } 
      reason = orWaitinglist.getWDescription(); 
      DefaultScheduleEvent newResourceEvent = new DefaultScheduleEvent(reason, dteBeginOrWaitingItem, dteEndOrWaitingItem, orWaitinglist); 
      newResourceEvent.setStyleClass("waitingitem"); 
      eventResourceAvailPerDay.addEvent(newResourceEvent); 
     } 
    } 
    catch(java.util.EmptyStackException Ex) 
    { 
     System.out.println(Ex.getMessage()); 
    } 


public static Date convertDate(Integer wDuration, Integer wAdditionalTime, Date availDate) 
{ 
    Calendar cal = Calendar.getInstance(); 
    Integer wAdditionalTimeHours, wAdditionalTimeMinutes; 
    Integer wDurationHours, wDurationMinutes; 

    if(wAdditionalTime != 0 || wDuration != 0) { 
     if (wAdditionalTime !=0) { 
      wAdditionalTimeHours = (int) Math.floor (wAdditionalTime/60); 
      wAdditionalTimeMinutes = wAdditionalTime - (wAdditionalTimeHours * 60); 
      cal.setTime(availDate); 
      cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DATE), cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND)); 
      cal.add(Calendar.MINUTE, wAdditionalTimeMinutes); 
      cal.add(Calendar.HOUR_OF_DAY, wAdditionalTimeHours); 
     } 
     if (wDuration != 0) { 
      wDurationHours = (int) Math.floor (wAdditionalTime/60); 
      wDurationMinutes = wAdditionalTime - (wDurationHours * 60); 
      cal.setTime(availDate); 
      cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DATE), cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND)); 
      cal.add(Calendar.MINUTE, wDurationMinutes); 
      cal.add(Calendar.HOUR_OF_DAY, wDurationHours); 
     } 
    } else { 
     cal.setTime(availDate); 
     cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DATE), cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND)); 
    } 
    return cal.getTime(); 
} 

型號更新:

<property name="WPlannedDate" type="timestamp"> 
    <column length="7" name="W_PLANNED_DATE"> 
    <comment>Planned date</comment> 
    </column> 
</property> 

回答

0

編輯:如果您使用.xml進行休眠更改類型爲時間戳而不是日期。因此 <property name="yourdate" column="YOUR_DATE" type="timestamp" /> 你有你的數據庫上的時間和可以使用的SimpleDateFormat

SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy-HH:mm"); 
dateFormat.format(orWaitinglist.getWPlannedDate()); 
+0

嗯,正如我所說,沒有時間在我的日期變量,所以這是有點沒用,因爲它只是返回我的日期0時間:12/02/12-00:00 .. 。 – JeroenVP

+0

如果正在使用的.xml爲休眠變更類型進行時間戳記的日期代替。 '<屬性名=「yourdate」 柱=「YOUR_DATE」 類型=「時間戳」 />' 因此你有時間在你的數據庫,並可以使用簡單日期格式 – Gokhan

+0

omg它的工作!:D會休眠或Java的任何問題,當我嘗試寫在這張表現在?現在只有1個問題我在數據庫中的時間是8:45但在我的變數是7:45,我認爲這與「CET」時區有關,對此有何修正? – JeroenVP

2

java.sql.Date不會返回時間成分,你應該在創建預編譯時使用java.util.Date或者你正在查詢數據庫的任何其他方式。

編輯: 使用java.util.Date與SQL查詢可能會很棘手,因爲查詢將期望java.sql.Date。它在春天適合我。如果你不想使用這個,那麼你也可以使用java.sql.Timestamp。

參見下面的文檔:

8.3.12 DATE,TIME和TIMESTAMP

有關於三個時間JDBC類型:

的JDBC DATE類型表示由一天中的日期,月,和 年。 SQL-92中定義了相應的SQL DATE類型,但是它僅由主要數據庫的子集實現的 。一些數據庫 提供了支持相似語義的替代SQL類型。時間類型表示時間由小時,分鐘和秒組成。 對應的SQL TIME類型是在SQL-92定義的,但它是 僅由主要數據庫的子集來實現。與DATE, 一些數據庫提供了支持類似 語義的SQL類型。 JDBC TIMESTAMP類型表示DATE plus TIME加 納秒字段。對應的SQL TIMESTAMP類型在 SQL-92所定義,但它是由只有極少數的 數據庫實現。由於標準的Java類java.util.Date並不 匹配任何這三個JDBC日期/時間類型的確切(它包括 日期和時間信息,但沒有納秒),JDBC定義java.util.Date的 三個子類以對應於SQL類型。 它們是:

java.sql.Date爲SQL DATE信息。小時,分鐘,秒和 毫秒字段的java.util.Date基類應該設置爲 零。如果向java.sql.Date 構造的毫秒數爲負,司機會計算日期作爲 數毫秒的1月1日之前,1970否則,日期 計算後指定的毫秒數1月1日,1970年

的java.sql.Time爲SQL TIME信息。將java.util.Date基類的年,月,日 字段設置爲1970年1月和 1.這是Java時期的「零」日期。用於SQL TIMESTAMP信息的java.sql.Timestamp。該類通過在納秒字段中添加 來擴展java.util.Date。

+0

我沒有得到正確的格式在上面的答案。你可以按照這個鏈接也:http://docs.oracle.com/javase/1.5.0/docs/guide/jdbc/getstart/mapping.html – Lokesh

+0

在我JavaClass我收到日期dteBeginOrWaitingItem =(util.sql。日期)2010-09-16);所以時間已經失去了嗎? Hibernate與我的數據庫通信,所以我不知道如何解決這個問題。 – JeroenVP

+0

您正在從數據庫讀取數據的權利?我相信使用休眠你必須在從DB查詢數據後填充bean,對吧?只需在你的bean中將你的日期設爲java.util.Date – Lokesh

0

代替java.sql.Datejava.sql.Timestamp,應該使用的匹配方法。 oracle類型DATE相當於JDBC和SQL標準類型TIMESTAMP

驅動程序是由JDBC規範所要求排除在部分時間,當使用的get/setDate方法之一。

相關問題