先理解下格式问题
要理解两种格式,一是mysql内部使用和存储时使用的格式,另一个是用户显示的格式;
存储格式:mysql保存日期时间值时使用的CCYY-MM-DD格式遵循ISO
8601标准;
显示格式:显示在输出界面上的格式,可以使用DATA_FORMAT()或TIME_FORMAT()函数来设置和转换;
1
转换和处理
1)提交数据,一是使用标准格式让其自动识别,二是对输入值进行格式指定和转换
insert
into
t
(d)
values('2012-01-01')
#使用默认ansi标准格式,让数据库自动识别字串为日期;
insert
into
t
(d)
values(
STR_TO_DATE('2012/February/01',
'%Y/%M/%d')
)
#使用字符转换为日期的函数来处理自定义格式的输入值;
2)查询数据,一是不使用格式(即使用默认的CCYY-MM-DD格式),二是指定输出格式
select
current_date()
#默认格式
select
date_format(current_date(),
''%Y/%M/%d'')
#使用自定义格式,具体参考下date_format的帮助,主要是格式控制符的使用。
2
格式化参数
DATE_FORMAT(),
TIME_FORMAT(),
STR_TO_DATE()这三个函数都接受格式化串作为参数来格式化日期时间
常用的格式化字符:
%Y
4位数字年份
2012
%y
2位数字年份
12
%M
完整英文月份名称,January
-
December
%b
月份名称前三个字母,Jan
-
Dec
%m
2位数字月份
01-12
%c
最小位数字月份
1-12
%d
2位数字日期
01-31
%e
最小位数字日期
1-31
%W
工作日名称
Sunday
-
Saturday
%r
12小时制时间,以AM或PM结尾
%T
24小时制时间
%H
24小时制小时
00-23
%i
2位数字分钟
00-59
%s
2位数字秒数
00-59
%%
%文字字符
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区别还是挺大的,date没有保存时间。但是java中的date(java.util.Date)记录的还是挺细的,日期和时间都可以记下来,那么现在问题来了,如果想在mysql中存储日期和时间,也就是用datetime,而在数据中应该如何对应呢?
我使用hibernate测了一下,发现当把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是保存不下“日期+时间”的,只能保存“时间”。
表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)