java與mysql的日期類型對應

MySQL(版本:5.1.50)的時間日期類型如下:

datetime 8bytes xxxx-xx-xx xx:xx:xx 1000-01-01 00:00:00到9999-12-31 23:59:59
timestamp 4bytes xxxx-xx-xx xx:xx:xx 1970-01-01 00:00:01到2038
date 3bytes xxxx-xx-xx 1000-01-01到9999-12-31
year 1bytes xxxx 1901到2155
time 3bytes xx:xx:xx -838:59:59到838:59:59(爲了滿足時間的加減運算)

 

 

Java(1.6) 中能保存時間日期類型的類主要有

java.util.Date

java.util.Calendar

java.sql.Date

java.sql.Time

java.sql.Timestamp

 

      以前從mysql中查詢出來的時間日期類型,都放在java.util.Date類型裏面了。這樣帶來一系列的問題,首先這個類提供的時間操作函數太少,一般都需要轉換成java.util.Calendar再去操作;其次即使使用了java.util.Calendar,也不是很方便,一個很簡單的想法,需要寫很多代碼才能實現;java.util.Date的數據內容爲xxxx-xx-xx xx:xx:xx,有時候不需要時間,只需要日期。從數據庫中取值出來的日期類型放到這個類中的時候,會在時間位自動補上當前時間。這使得本來兩個日期在數據庫中是相等的,取出來放到這個類得時候就不再相等了,需要去考慮時間上的誤差,很是頭疼。

 

java提供與mysql方便交互的三種數據類型

java.sql.Date

java.sql.Time

java.sql.Timestamp

它們都是繼承java.util.Date,算是對該類的精簡,很適合跟數據庫交互。

 

===========java注入數據庫==========

java類型   mysql類型        成功與否
date         date               yes
date         time               no
date         timestamp       no
date         datetime         no

time         date               no
time         time               yes
time         timestamp       no
time         datetime         no

timestamp date              yes
timestamp time              yes
timestamp timestamp     yes
timestamp datetime        yes
==========end 
java注入數據庫========
總規律,如果A完全包含B,則A可以向B注入數據,否則報錯


 

==========從數據庫提取到java ==========

mysql類型    java類型     成與否
date             date         yes
date             time         yes --------------缺少的部分使用曆元
date           timestamp   yes --------------缺少的部分使用曆元  

time           date           yes --------------缺少的部分使用曆元
time           time           yes
time          timestamp    yes --------------缺少的部分使用曆元

timestamp date           yes
timestamp time           yes
timestamp timestamp   yes

datetime      date         yes
datetime      time         yes
datetime    timestamp   yes
==========end
 從數據庫提取到java=======
不會出錯,缺少的部分使用曆元,而不是當前日期時間

 

 

 

 

 


null to db(null) =====> 也是null  
null to db(not null)=======> 數據庫報錯
db(null) to java==========> 如果單字段出來,則整個entity都是null,如果帶着其他不是null的字段出來,則可以實例化entity,本身字段依然是null
db(not null) to java==========> 如果包含日期,則報錯,否則爲000
最優解決方案,定義成可以爲null

java.sql時間系統的運算系列

after,before
compareTo原小於參數返回<0,等於返回=0,大於返回>0

優點:於數據庫同類型,可以方便傳輸(無論是從DB到src還是反方向),方便比較大小
缺點:缺少運算單元,不適合時間跳躍的運算和間隔的運算

總結:calendar具有強大的跳躍運算和間隔運算能力,在需要的時候,可以將sql系列的時間轉成calendar。
先設置calendar爲曆元,然後從sql系列時間中轉換,最後再轉回sql系列時間。
calendar只用於時間有跳躍的轉換,對比運算統一使用sql系統,這樣代碼將更清晰

 

 

 

 

date 和 calendar怎麼初始化爲格林威治時間

new date(0)
calendar.setTimeInMillis(0)


sql系列時間

static valueOf


new XX(0)獲得曆元
new XX(year+1900, month+1,day,hour,minute,second,nano)已過時,創建也沒錯

toString或者SimpleDateFormat



文章來源: http://blog.csdn.net/weinianjie1/article/details/6310770

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章