2012-11-27 82 views
1

下面的代碼打印出「vmtDataOrig.creationdate = 2012年11月3日」java.util.Date.toString()被打印出錯誤的格式

VmtData vmtDataOrig = VmtDataDao.getInstance().loadVmt(1); 
System.out.println("vmtDataOrig.creationdate=" + vmtDataOrig.getCreationDate().toString()); 

這裏是在所述的creationDate字段的定義VmtData類:

private Date creationDate = null; 

這裏是creationDate字段的休眠映射數據庫表的列:

<property name="creationDate" column="CREATIONDATE" type="date"/> 

MySQL數據庫表中的CREATIONDATE列的類型爲「date」,對於檢索到的記錄,其值爲「2012-11-03」。

java.util.Date.toString()方法的Javadoc表示它應該以「dow mon dd hh:mm:ss zzz yyyy」格式打印Date對象。任何人都知道它爲什麼以「yyyy-MM-dd」的形式打印出來?

+2

你確定這不是'java.sql.Date'嗎? – SLaks

+0

VmtData.java具有「import java.util。*;」它不會從java.sql中導入任何內容 – pacoverflow

+0

@pacoverflow由於碰撞(兩個單獨的Date類導入),它無法導入java.sql.Date。這意味着方法中返回的Date可能會返回一個'java.sql.Date',但它會顯式地在方法中輸入,如'java.sql.Date date = blah;'。 – Vulcan

回答

3

即使字段是java.util.Date型的,Hibernate的可能仍然是填充其與java.sql.Date,其子類java.util.Date和覆蓋toString() ...例如:

public class Test { 
    public static void main(String[] args) throws Exception { 
     java.util.Date date = new java.sql.Date(0); 
     System.out.println(date); // 1970-01-01 
    } 
} 

這很容易檢查雖然:

System.out.println(vmtDataOrig.getCreationDate().getClass()); 
+0

謝謝,這正是發生了什麼事情。 – pacoverflow

0

您的hibernate類型是date,因此使用了java.sql.Date(它是java.util.date的子類)。如果將hibernate類型更改爲java.sql.Timestamp,它將使用其toString()實現。