正在加载...
分页: 1/1 第一页 1 最后页 [ 显示模式: 摘要 | 列表 ]

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
Tags: , ,

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);

这样就能把正常日期转成时间戳了,这里如果有时分秒也是同理,就不作详说了
Tags: , ,
分页: 1/1 第一页 1 最后页 [ 显示模式: 摘要 | 列表 ]