timestamp這種類型就是包含日期和時間的而且根據時區(qū)來顯示的,將這列的類型設置為date時你看看這一列有沒有允許空值,date是有效的數據類型報錯的話一般都是沒有允許空值后面還default null,你可以用curdate()去返回當前日期。
站前ssl適用于網站、小程序/APP、API接口等需要進行數據傳輸應用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯公司的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯系或者加微信:028-86922220(備注:SSL證書合作)期待與您的合作!
java中有date和datetime,mysql中也有date和datetime,這里我們來說說mysql中的date和datetime。
1 mysql中的date和datetime
1.1 DATETIME
類型可用于需要同時包含日期和時間信息的值。MySQL 以:
‘YYYY-MM-DD HH:MM:SS’
格式檢索與顯示 DATETIME 類型。支持的范圍是:
‘1000-01-01 00:00:00’
到
‘9999-12-31 23:59:59’。
(“支持”的含義是,盡管更早的值可能工作,但不能保證他們均可以。)
1.2 DATE
類型可用于需要一個日期值而不需要時間部分時。MySQL 以
‘YYYY-MM-DD’
格式檢索與顯示DATE值。支持的范圍則是
‘1000-01-01’
到
‘9999-12-31’。
2 與java數據的交互
能看出來mysql中的date和datetime區(qū)別還是挺大的,date沒有保存時間。但是java中的date(java.util.Date)記錄的還是挺細的,日期和時間都可以記下來,那么現在問題來了,如果想在mysql中存儲日期和時間,也就是用datetime,而在數據中應該如何對應呢?
我使用hibernate測了一下,發(fā)現當把mysql數據庫中設置了datetime,反向工程生成的hbm.xml文件中,使用的是timestamp,如下:
property name="Publishdate" column="publishdate" type="timestamp" not-null="false" length="10" /1
反向生成java的pojo時,生成的還是Date。
由此可見對于mysql中datetime,與java中的date,如果要使二者正確交互,中間要使用timestamp。
如果要在JAVA中直接插入MySql的datetime類型,則可以使用:
Date date = new Date();
Timestamp timeStamp = new Timestamp(date.getTime());12
再用setTimestamp()設置數據庫中的“日期+時間”。
這樣放入數據庫的就是“yyyy-mm-dd hh:mm:ss”格式的數據。
注意,mysql中如果使用date而不是datetime是保存不下“日期+時間”的,只能保存“時間”。
1.1 獲得當前日期+時間(date + time)函數:now()
除了 now() 函數能獲得當前的日期時間外,MySQL 中還有下面的函數:
current_timestamp() current_timestamp
localtime() localtime
localtimestamp() localtimestamp
這些日期時間函數,都等同于 now()。鑒于 now() 函數簡短易記,建議總是使用 now() 來替代上面列出的函數。
1.2 獲得當前日期+時間(date + time)函數:sysdate()
sysdate() 日期時間函數跟 now() 類似,不同之處在于:now() 在執(zhí)行開始時值就得到了, sysdate() 在函數執(zhí)行時動態(tài)得到值。
2. 獲得當前日期(date)函數:curdate()
其中,下面的兩個日期函數等同于 curdate(): current_date(),current_date
3. 獲得當前時間(time)函數:curtime()
其中,下面的兩個時間函數等同于 curtime():current_time(),current_time
4. 獲得當前 UTC 日期時間函數:utc_date(), utc_time(), utc_timestamp()
mysql有豐富的時間函數:
ADDTIME
(date2
,time_interval
)
//將time_interval加到date2
CONVERT_TZ
(datetime2
,fromTZ
,toTZ
)
//轉換時區(qū)
CURRENT_DATE
(
)
//當前日期
CURRENT_TIME
(
)
//當前時間
CURRENT_TIMESTAMP
(
)
//當前時間戳
DATE
(datetime
)
//返回datetime的日期部分
DATE_ADD
(date2
,
INTERVAL
d_value
d_type
)
//在date2中加上日期或時間
DATE_FORMAT
(datetime
,FormatCodes
)
//使用formatcodes格式顯示datetime
DATE_SUB
(date2
,
INTERVAL
d_value
d_type
)
//在date2上減去一個時間
DATEDIFF
(date1
,date2
)
//兩個日期差
DAY
(date
)
//返回日期的天
DAYNAME
(date
)
//英文星期
DAYOFWEEK
(date
)
//星期(1-7)
,1為星期天
DAYOFYEAR
(date
)
//一年中的第幾天
EXTRACT
(interval_name
FROM
date
)
//從date中提取日期的指定部分
MAKEDATE
(year
,day
)
//給出年及年中的第幾天,生成日期串
MAKETIME
(hour
,minute
,second
)
//生成時間串
MONTHNAME
(date
)
//英文月份名
NOW
(
)
//當前時間
SEC_TO_TIME
(seconds
)
//秒數轉成時間
STR_TO_DATE
(string
,format
)
//字串轉成時間,以format格式顯示
TIMEDIFF
(datetime1
,datetime2
)
//兩個時間差
TIME_TO_SEC
(time
)
//時間轉秒數]
WEEK
(date_time
[,start_of_week
])
//第幾周
YEAR
(datetime
)
//年份
DAYOFMONTH(datetime)
//月的第幾天
HOUR(datetime)
//小時
LAST_DAY(date)
//date的月的最后日期
MICROSECOND(datetime)
//微秒
MONTH(datetime)
//月
MINUTE(datetime)
//分返回符號,正負或0
SQRT(number2)
//開平方
以上函數僅供參考,詳細的可以查看雷雪松的博客。
1.1 獲得當前日期+時間(date + time)函數:now()
除了 now() 函數能獲得當前的日期時間外,MySQL 中還有下面的函數:
current_timestamp() current_timestamp
localtime() localtime
localtimestamp() localtimestamp
這些日期時間函數,都等同于 now()。鑒于 now() 函數簡短易記,建議總是使用 now() 來替代上面列出的函數。
1.2 獲得當前日期+時間(date + time)函數:sysdate()
sysdate() 日期時間函數跟 now() 類似,不同之處在于:now() 在執(zhí)行開始時值就得到了, sysdate() 在函數執(zhí)行時動態(tài)得到值。
2. 獲得當前日期(date)函數:curdate()
其中,下面的兩個日期函數等同于 curdate(): current_date(),current_date
3. 獲得當前時間(time)函數:curtime()
其中,下面的兩個時間函數等同于 curtime():current_time(),current_time
4. 獲得當前 UTC 日期時間函數:utc_date(), utc_time(), utc_timestamp()
1、首先,我們打開軟件,需要創(chuàng)建一個控制臺應用程序,在Main方法中用來獲取并輸出系統(tǒng)當前的日期,輸入:DateTime now = DateTime.Now。
2、在visual studio中按F5就可以調試模式運行程序,這個時候,就可以看到當前的日期加時間都輸出來了。
3、獲取到了今天的日期,這個時候就可以使用DayOfWeek屬性了。輸入DayOfWeek week = now.DayOfWeek。
4、重新調試運行,就可以看到當前系統(tǒng)日期,以及星期幾都輸出來了。只不過星期輸出來的是英文。
5、接著,在Program類的同級,添加一個新的靜態(tài)類和靜態(tài)方法,此處使用靜態(tài),僅僅只是為了方便調用。在這個方法中,接收開始、結束日期,然后計算出兩個日期之間的工作日天數。
6、在Main方法中,直接通過靜態(tài)類的靜態(tài)方法調用,并將結果輸出到控制臺窗口。
7、重新調試模式運行,就可以看到指定傳入的日期之間的工作日天數都計算出來了。