Linux 时间命令
[ 2009/02/16 21:01 | by selboo ]
Linux中的时间和时区
格林威治时间(GMT Greenwich Mean Time)是我们常提到的, 它也就是0时区时间. 但是我们在计算机中经常看到的是UTC. 它是Universal Time Coordinated的简写. 虽然可以认为UTC和GMT的值相等(误差相当之小),但是UTC已经被认定为是国际标准,所以我们都应该遵守标准只使用UTC.假如现在中国当地的时间是晚上8点的话,我们可以有下面两种表示方式:20:00 CST和12:00 UTC,这里的CST是Chinese Standard Time,也就是我们通常所说的北京时间了. 因为中国处在UTC+8时区,依次类推那么也就是12:00 UTC了.时区的另一个概念问题请看:http://bldmickey.blog.sohu.com/52743243.html
设置Linux Time Zone
在Linux下glibc提供了我们事先编译好的许多timezone文件, 他们就放在/usr/share/zoneinfo这个目录下。
设置时区的方式:
[root@localhost ~]# ln -sf /usr/share/zoneinfo/posix/Asia/Shanghai /etc/localtime
修改/etc/sysconfig/clock文件,例如:
[root@localhost ~]# cat /etc/sysconfig/clock
ZONE="Asia/Shanghai"
UTC=false
ARC=false
设置TZ环境变量的值
TZ的值可以有多种格式,最简单的设置方法就是使用tzselect命令,或者设置TZ环境变量
You can make this change permanent for yourself by appending the line
TZ='Asia/Shanghai'; export TZ
to the file '.profile' in your home directory; then log out and log in again.
[root@localhost ~] #date
Thu Sep 20 17:40:08 CST 2007
修改系统时间
语法:date -s "dd/mm/yyyy hh:mm:ss"例如:
date -s 20090216 设置成2009年2月16日,这样会把具体时间设置成空00:00:00
date -s 20:04:12 设置具体时间,不会对日期做更改
date -s "20:04:12 2007-09-09" 这样可以设置全部时间
Linux中的RTC和系统时钟
在一台计算机上我们有两个时钟:一个称之为硬件时间时钟(RTC),还有一个称之为系统时钟(System Clock)。硬件时钟是指嵌在主板上的特殊的电路, 它的存在就是平时我们关机之后还可以计算时间的原因。系统时钟就是操作系统的kernel所用来计算时间的时钟. 它从1970年1月1日00:00:00 UTC时间到目前为止秒数总和的值在Linux下系统时间在开机的时候会和硬件时间同步(synchronization),之后也就各自独立运行了。在一些虚拟机中经常会出现RTC和系统时钟不同步的情况。
[root@localhost ~]# hwclock -r [root@localhost ~] #读取当前硬件时间时钟(RTC),
Thu 20 Sep 2007 05:51:53 PM CST -0.445215 seconds
[root@localhost ~]# hwclock -w
[root@localhost ~]# hwclock -w or hwclock --systohc将系统时钟同步到RTC
设置Linux NTP Client
[root@localhost ~] # crontab -e
转换时间为时间戳
[root@localhost ~]# date +%s -d "20090216" 只填写日期.默认会把时间设置成00:00:00
1234713600
[root@localhost ~]# date +%s -d "20090216 19:54:19"
1234785259
转换时间戳为时间
[root@localhost ~]# date -d '19700101 UTC 1234713600 seconds'
2009年 02月 16日 星期一 00:00:00 CST
[root@localhost ~]# date -d '19700101 UTC 1234785259 seconds'
2009年 02月 16日 星期一 19:54:19 CST
格林威治时间(GMT Greenwich Mean Time)是我们常提到的, 它也就是0时区时间. 但是我们在计算机中经常看到的是UTC. 它是Universal Time Coordinated的简写. 虽然可以认为UTC和GMT的值相等(误差相当之小),但是UTC已经被认定为是国际标准,所以我们都应该遵守标准只使用UTC.假如现在中国当地的时间是晚上8点的话,我们可以有下面两种表示方式:20:00 CST和12:00 UTC,这里的CST是Chinese Standard Time,也就是我们通常所说的北京时间了. 因为中国处在UTC+8时区,依次类推那么也就是12:00 UTC了.时区的另一个概念问题请看:http://bldmickey.blog.sohu.com/52743243.html
设置Linux Time Zone
在Linux下glibc提供了我们事先编译好的许多timezone文件, 他们就放在/usr/share/zoneinfo这个目录下。
设置时区的方式:
[root@localhost ~]# ln -sf /usr/share/zoneinfo/posix/Asia/Shanghai /etc/localtime
修改/etc/sysconfig/clock文件,例如:
[root@localhost ~]# cat /etc/sysconfig/clock
ZONE="Asia/Shanghai"
UTC=false
ARC=false
设置TZ环境变量的值
TZ的值可以有多种格式,最简单的设置方法就是使用tzselect命令,或者设置TZ环境变量
You can make this change permanent for yourself by appending the line
TZ='Asia/Shanghai'; export TZ
to the file '.profile' in your home directory; then log out and log in again.
[root@localhost ~] #date
Thu Sep 20 17:40:08 CST 2007
修改系统时间
语法:date -s "dd/mm/yyyy hh:mm:ss"例如:
date -s 20090216 设置成2009年2月16日,这样会把具体时间设置成空00:00:00
date -s 20:04:12 设置具体时间,不会对日期做更改
date -s "20:04:12 2007-09-09" 这样可以设置全部时间
Linux中的RTC和系统时钟
在一台计算机上我们有两个时钟:一个称之为硬件时间时钟(RTC),还有一个称之为系统时钟(System Clock)。硬件时钟是指嵌在主板上的特殊的电路, 它的存在就是平时我们关机之后还可以计算时间的原因。系统时钟就是操作系统的kernel所用来计算时间的时钟. 它从1970年1月1日00:00:00 UTC时间到目前为止秒数总和的值在Linux下系统时间在开机的时候会和硬件时间同步(synchronization),之后也就各自独立运行了。在一些虚拟机中经常会出现RTC和系统时钟不同步的情况。
[root@localhost ~]# hwclock -r [root@localhost ~] #读取当前硬件时间时钟(RTC),
Thu 20 Sep 2007 05:51:53 PM CST -0.445215 seconds
[root@localhost ~]# hwclock -w
[root@localhost ~]# hwclock -w or hwclock --systohc将系统时钟同步到RTC
设置Linux NTP Client
[root@localhost ~] # crontab -e
转换时间为时间戳
[root@localhost ~]# date +%s -d "20090216" 只填写日期.默认会把时间设置成00:00:00
1234713600
[root@localhost ~]# date +%s -d "20090216 19:54:19"
1234785259
转换时间戳为时间
[root@localhost ~]# date -d '19700101 UTC 1234713600 seconds'
2009年 02月 16日 星期一 00:00:00 CST
[root@localhost ~]# date -d '19700101 UTC 1234785259 seconds'
2009年 02月 16日 星期一 19:54:19 CST
php时间戳与日期互转
[ 2009/01/11 02:26 | by selboo ]
日期与时间都是每个PHP程式员经常要用到的技术,特别是做查询类,日期查询更是要经常要用到.
PHP时间大的来分有两种,一是时间戳类型(1228348800),二是正常日期格式(2008-12-4)
所以存到数据库也有两种形式了(真正不止,我的应用就两种),时间戳类型我是保存为字符串的,这个是比较方便的.
正常日期类型是保存为DATE型的.
这两个要注意一下,我平时用两种,所以,前几天建的表,把时间类型存为DATE的,我还一直用时间戳保存,一直资料写不进表,调试了好久的才知错误之处,是类型不符合,不给写入库.
像上面的时间戳是比较方便,但,显示的时候,不至于把这个1228348800串给客户看吧,GOD NOWS!
所以就用到了这两个的转换,先说一下如何取得当前的时间戳,$date1=time();这样就取得当前的时间戳了,要转回2008-12-4这种格式呢,用到date()这个函数了,在PHP中date()函数比较常用,如取得当前日期,可以用$date2=date('Y-m-d');,关于里面参数的意思,如不懂就查一下php的手册了.
好,言归正传,把1228348800转成2008-12-4格式代码如下:
$date3=date('Y-m-d',"1228348800");
这样就OK了,如还想得到小时,分钟秒,只要把'Y-m-d'改一下就可以了,不过要注意一下,PHP时间还像有8个小时的误差.加上就OK了.
时间戳转正常日期有了,反之呢,把正常日期格式转为时间戳呢,请看如下代码:
$year=((int)substr("2008-12-04",0,4));//取得年份
$month=((int)substr("2008-12-04",5,2));//取得月份
$day=((int)substr("2008-12-04",8,2));//取得几号
echo mktime(0,0,0,$month,$day,$year);
这样就能把正常日期转成时间戳了,这里如果有时分秒也是同理,就不作详说了
PHP时间大的来分有两种,一是时间戳类型(1228348800),二是正常日期格式(2008-12-4)
所以存到数据库也有两种形式了(真正不止,我的应用就两种),时间戳类型我是保存为字符串的,这个是比较方便的.
正常日期类型是保存为DATE型的.
这两个要注意一下,我平时用两种,所以,前几天建的表,把时间类型存为DATE的,我还一直用时间戳保存,一直资料写不进表,调试了好久的才知错误之处,是类型不符合,不给写入库.
像上面的时间戳是比较方便,但,显示的时候,不至于把这个1228348800串给客户看吧,GOD NOWS!
所以就用到了这两个的转换,先说一下如何取得当前的时间戳,$date1=time();这样就取得当前的时间戳了,要转回2008-12-4这种格式呢,用到date()这个函数了,在PHP中date()函数比较常用,如取得当前日期,可以用$date2=date('Y-m-d');,关于里面参数的意思,如不懂就查一下php的手册了.
好,言归正传,把1228348800转成2008-12-4格式代码如下:
$date3=date('Y-m-d',"1228348800");
这样就OK了,如还想得到小时,分钟秒,只要把'Y-m-d'改一下就可以了,不过要注意一下,PHP时间还像有8个小时的误差.加上就OK了.
时间戳转正常日期有了,反之呢,把正常日期格式转为时间戳呢,请看如下代码:
$year=((int)substr("2008-12-04",0,4));//取得年份
$month=((int)substr("2008-12-04",5,2));//取得月份
$day=((int)substr("2008-12-04",8,2));//取得几号
echo mktime(0,0,0,$month,$day,$year);
这样就能把正常日期转成时间戳了,这里如果有时分秒也是同理,就不作详说了