java和mysql之間的時間日期類型傳遞

mysql(版本:5.1.50)的時間日期類型以下:java

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(爲了知足時間的加減運算)mysql

 

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

java.util.Date數據庫

java.util.Calendar函數

java.sql.Datespa

java.sql.Time.net

java.sql.Timestamporm

 

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

 

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

相關文章
相關標籤/搜索