重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
Mysql中经常用来存储日期的数据类型有三种:Date、Datetime、Timestamp。
创新互联公司专注骨干网络服务器租用十余年,服务更有保障!服务器租用,BGP机房服务器托管 成都服务器租用,成都服务器托管,骨干网络带宽,享受低延迟,高速访问。灵活、实现低成本的共享或公网数据中心高速带宽的专属高性能服务器。
Date数据类型:用来存储没有时间的日期。Mysql获取和显示这个类型的格式为“YYYY-MM-DD”。支持的时间范围为“1000-00-00”到“9999-12-31”。
Datetime类型:存储既有日期又有时间的数据。存储和显示的格式为 “YYYY-MM-DD HH:MM:SS”。支持的时间范围是“1000-00-00 00:00:00”到“9999-12-31 23:59:59”。
Timestamp类型:也是存储既有日期又有时间的数据。存储和显示的格式跟Datetime一样。支持的时间范围是“1970-01-01 00:00:01”到“2038-01-19 03:14:07”。
所有不符合上面所述格式的数据都会被转换为相应类型的0值。(0000-00-00或者0000-00-00 00:00:00)
把php.ini中的
;date.timezone =
修改成 date.timezone = PRC
重启即可
还有
我们一般使用“date -s”命令来修改系统时间。比如将系统时间设定成2005年7月26日的命令如下。
#date -s 03/28/2008
将系统时间设定成下午11点12分0秒的命令如下。
#date -s 11:24:00
注意,这里说的是系统时间,是linux由操作系统维护的。
在系统启动时,Linux操作系统将时间从CMOS中读到系统时间变量中,以后修改时间通过修改系统时间实现。为了保持系统时间与CMOS时间的一致性,Linux每隔一段时间会将系统时间写入CMOS。由于该同步是每隔一段时间(大约是11分钟)进行的,在我们执行date -s后,如果马上重起机器,修改时间就有可能没有被写入CMOS,这就是问题的原因。如果要确保修改生效可以执行如下命令。
#clock -w
这个命令强制把系统时间写入CMOS。
将Excel文件中的数据保存到mysql中时,发现日期变成了数字。
当excel中的日期以数字显示就会变成类似44721.81这样的数字,这是从1900年开始的天数。
而UNIX时间戳的 0 按照 ISO 8601 规范为 :1970-01-01T00:00:00Z.。也就是从1970开始。
那当我们需要在其他地方处理excel这种时间时就只需要加上70年就行了。接下来的问题就是如何知道这70年的秒数或毫秒数,可以在excel输入1970/1/1然后转换成数字得到25569,这是天数,秒则为25569*24*60*60=2209161600。毫秒的话再乘1000。精度取到秒和毫秒按实际情况定。
在excel中有个日期2022/6/9 19:31:57.850,当其为数字格式时为44721.813864,就叫他Excel时间。
如果需要在java中将其转化为日期,Date date = new Date(new Long(时间戳);这里需要毫秒精度的时间戳。先将Excel时间*一天的毫秒数(24*60*60*1000)-70年(2209161600*1000)-8小时时差(8*60*60*1000)=1654774317850。代入上方得到2022/6/9 19:31:57.850,转换正确。
如果需要在mysql中将其转化为日期,FROM_UNIXTIME(时间戳,'%Y-%m-%d %H:%i:%S');这里只需要秒精度的时间戳。先将Excel时间*一天的秒数(24*60*60)-70年(2209161600)-8小时时差(8*60*60)=1654774317。代入上方得到2022/6/9 19:31:57,转换正确。
当excel中的日期到mysql中变成数字了,只需要FROM_UNIXTIME(Excel时间*86400-2209190400,'%Y-%m-%d %H:%i:%s')就可以转化成正常时间了
设置某字段为当前时间,修改日期类型为timestamp并允许空,如下:
create
table
`test`
(`aaaa`
varchar(50)
not
null,`createday`
timestamp
null
default
current_timestamp
on
update
current_timestamp)
engine=innodb
default
charset=utf8;
如果是在navicat下操作的话,设置字段的类型为timestamp,默认值写上
current_timestamp.
由于MySQL目前字段的默认值不支持函数,所以以create_time datetime default now() 的形式设置默认值是不可能的。代替的方案是使用TIMESTAMP类型代替DATETIME类型。
TIMESTAMP列类型自动地用当前的日期和时间标记INSERT或UPDATE的操作。如果有多个TIMESTAMP列,只有第一个自动更新。