Date date = new Date(); java.sql.Date d = new java.sql.Date(date.getTime());
居然不支持Date參數的構造器,我只好傳入long類型的時間。接下去,我嘗試把當前小時數取出來:
1
System.out.println(d.getHours());
悲劇出現了:
12
Exception in thread "main" java.lang.IllegalArgumentException at java.sql.Date.getHours(Date.java:177)
一看源碼,坑爹啊:
123
public int getHours() { throw new java.lang.IllegalArgumentException(); }
在java.util.Date里面好好的方法怎么變成這個鳥樣了? 方法注釋給出了說明: This method is deprecated and should not be used because SQL Date values do not have a time component. 也就是說,java.sql.Date是SQL中的單純的日期類型,哪會有時分秒啊?我覺得它根本不應該設計成java.util.Date的子類。如果你把java.sql.Date通過JDBC插入數據庫,你會發現時分秒都丟失了,因此如果你同時需要日期和時間,你應該使用Timestamp,它也是java.util.Date的子類。 另外還有一個java.util.Date的子類叫Time,java.sql包下面的Date、Time和Timestamp可以放在一起記憶。Date只包含年月日信息、Time只包含時分秒信息,而Times則包含時間戳的完整信息。 現在知道人家拋出IllegalArgumentException的用心良苦了吧…… 坑爹的year和month 看看Date類的構造器:
1
public Date(int year, int month, int day)
長得并不奇葩嘛。 好,現在我要輸出2012年的1月1號了:
12
Date date = new Date(2012,1,1); System.out.println(date);