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