开发程序时对时间、时区的一些注意事项与设置

分享于:2019-11-01 20:33:19

刚分享了文章《mysql记录时间选择哪种字段合适?》,我们在开发程序前做准备工作,需要对“时间”做好统一设置。毕竟“时间”在程序中,是频繁参与计算的一个参数,设置不当,有可能造成逻辑出错。


在程序中,服务端程序语言获取时间来源是从服务器(比如PHP脚本语言的time()获取的时间戳来自服务器),客户端语言时间来源是从客户机(比如JS)。


用PHP做网站,首先要把服务器时间校对好。在中国,大家都使用的是北京时间。服务器在国内买的默认已是北京时间,不需要我们自己设置。如果需要动手设置,也很简单。Windows直接在右下角点击时间=》更改日期和时间设置;Linux可使用date命令设置时间。


设置完时间,我们还需要注意一个问题,那就是时区的问题。


在中学地理课我们有学过“时区”的知识,太详细的不说了,介绍两个名词:


CST:中国标准时间(China Standard Time),这个解释可能是针对RedHat Linux。我们可把它理解为北京时间、东八区时间。


UTC:协调世界时,又称世界标准时间,简称UTC,从英文国际时间/法文协调时间”Universal Time/Temps Cordonné”而来。中国大陆、香港、澳门、台湾、蒙古国、新加坡、马来西亚、菲律宾、澳洲西部的时间与UTC的时差均为+8,也就是UTC+8。


怎么设置时区呢?Windows和设置时间一样,点击右下角进入时间修改,Linux怎么设置在下面再讲。使用PHP获取下有关时区的信息:


date('e');//时区标识,同函数date_default_timezone_get()一样
date('T');//本机所在的时区


date('e') 获取的是PHP设置的时区,PHP可使用函数date_default_timezone_set('Asia/Shanghai')进行设置。

除了用此函数,你还可以通过 INI 设置 date.timezone 来设置默认时区。


PHP与服务器可设置成不同的时区。是这样一种情况,比方说服务器设置的时区是UTC,而PHP设置成东八区(东八区的值是‘Asia/Shanghai’)。当服务器是凌晨零点零分,用PHP的date('H:i:s')函数打印出的是时间却是“08:00:00”。当然,不建议这样设置。针对中国用户,我们还是服务器、PHP都设置成东八区比较好。


转载:Linux设置时区的操作


一、查看和修改Linux的时区

1. 查看当前时区

命令 : "date -R"

2. 修改设置Linux服务器时区

方法 A

命令 : "tzselect"

方法 B 仅限于RedHat Linux 和 CentOS

命令 : "timeconfig"

方法 C 适用于Debian

命令 : "dpkg-reconfigure tzdata"

3. 复制相应的时区文件,替换系统时区文件;或者创建链接文件

cp /usr/share/zoneinfo/$主时区/$次时区 /etc/localtime

例如:在设置中国时区使用亚洲/上海(+8)

cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

4.注意

GMT(Greenwich Mean Time,格林威治标准时间): 
是指位于英国伦敦郊区的皇家格林尼治天文台的标准时间,因为本初子午线被定义在通过那里的经线。
UTC(Universal Time/Temps 
Cordonné 世界标准时间)
CST(Central Standard Time 國家標準時間,一說中原標準時間); 中国标准时间(China 
Standard Time)
GMT + 8 = UTC + 8 = CST

二、查看和修改Linux的时间

1、date

查看系统时间

# date

设置系统时间

# date --set “07/07/06 10:19" (月/日/年 时:分:秒)

将当前时间和日期写入BIOS,避免重启后失效

命令 : "hwclock -w"

2、hwclock/clock

查看硬件时间

# hwclock --show

或者 # clock --show

设置硬件时间

# hwclock --set --date="07/07/06 10:19" (月/日/年 时:分:秒)

或者 # clock --set --date="07/07/06 10:19" (月/日/年 时:分:秒)

3、硬件时间和系统时间的同步

按照前面的说法,重新启动系统,硬件时间会读取系统时间,实现同步,但是在不重新启动的时候,需要用hwclock或clock命令实现同步。

硬件时钟与系统时钟同步:

# hwclock --hctosys(hc代表硬件时间,sys代表系统时间)

或者

# clock --hctosys

系统时钟和硬件时钟同步: # hwclock --systohc 或者 # clock --systohc

针对中国时区,修改操作如下

1.   修改文件 /etc/sysconfig/clock内容:

ZONE=Asia/Shanghai UTC=false ARC=false

2.     rm /etc/localtime

ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime