centos设置utc?centos怎么设置中文

这篇文章给大家聊聊关于centos设置utc,以及centos怎么设置中文对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。

【UTC】CentOS7修改时区的正确姿势

整个地球分为二十四时区,每个时区都有自己的本地时间。在国际无线电通信场合,为了统一起见,使用一个统一的时间,称为通用协调时(UTC,Universal Time Coordinated)。

格林威治标准时间(Greenwich Mean Time)指位于英国伦敦郊区的皇家格林尼治天文台的标准时间,因为本初子午线被定义在通过那里的经线。(UTC与GMT时间基本相同,本文中不做区分)

中国标准时间(China Standard Time)【GMT + 8 = UTC + 8 = CST】

夏令时(Daylight Saving Time)指在夏天太阳升起的比较早时,将时钟拨快一小时,以提早日光的使用。(中国不使用)

RTC(Real-Time Clock)或CMOS时钟,一般在主板上靠电池供电,服务器断电后也会继续运行。仅保存日期时间数值,无法保存时区和夏令时设置。

一般在服务器启动时复制RTC时间,之后独立运行,保存了时间、时区和夏令时设置。

在CentOS 6版本,时间设置有date、hwclock命令,从CentOS 7开始,使用了一个新的命令timedatectl。

Centos7修改系统时区timezone ,解决快、慢8小时问题

如果服务器用非 UTC的时间,时区转换很容易不一致,而且对于有 daylight saving的时区,每年多一小时少一小时的那两天,系统就会出现各种诡异现象。

服务器使用UTC时间,如要显示用户所在时区的本地时间,在客户端转化即可。

# timedatectl

我们可以看到,服务器使用的CST时间

# timedatectl set-timezone UTC

# timedatectl set-time"YYYY-MM-DD HH:MM:SS"

# timedatectl set-time "HH:MM:SS"

# timedatectl

我们可以看到,服务器时间类型更改为UTC了

# ll /etc/locatime

lrwxrwxrwx. 1 root root 25 1月 14 08:30 /etc/localtime->../usr/share/zoneinfo/UTC

实际上是做了一个将 

 文件 /etc/localtime 做了一个软连接到 /usr/share/zoneinfo/UTC

# ln -s /usr/share/zoneinfo/UTC  /etc/localtime

ln:无法创建符号链接"/etc/localtime":文件已存在

# ln -sf /usr/share/zoneinfo/UTC   /etc/localtime

做软连接时,需要加-f参数,强制覆盖,不然会显示软链接已存在

# timedatectl set-time"YYYY-MM-DD HH:MM:SS"

# timedatectl set-time "HH:MM:SS"   //只设置时分秒

# timedatectl

# clock -w

# date -u  //显示UTC时间

CentOS7修改时区的正确姿势

CentOS7上运行Java程序,发现程序生成的时间与当前时间匹配不上,还以为是数据停止更新了,后来发现没有正确使用修改时区的姿势,导致程序时区错误。

正确的修改CentOS7时区的姿势:

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

其他系统的修改文件可能是/var/etc/localtime.

错误的姿势:通过cp命令覆盖/etc/localtime时间

 # cp-f /usr/share/zoneinfo/Asia/Shanghai  /etc/localtime

通过cp命令修改时区,通过date, data-R命令显示的时区都是正确的,可是对于java程序而言,是错误的。

具体原因在于Java访问系统时区的方式上,可参见文章:

Java TimeZone和 Linux TimeZone问题

该文章很好的说明了Java访问系统时区的方式:

1.如有环境变量 TZ设置,则用TZ中设置的时区

2.在/etc/sysconfig/clock文件中找“ZONE”的值

3.如何2)都没,就用/etc/localtime和/usr/share/zoneinfo下的时区文件进行匹配,如找到匹配的,就返回对应的路径和文件名。 

问题在于,如果使用cp命令来修改/etc/localtime文件,那么可能就会导致修改的不是/etc/localtime文件,而是原时区的文件内容。

/etc/localtime是通过符号链接链接/usr/share/zoneinfo下的文件,而java是通过文件名来确认时区的,data命令是通过文件内容确认时区的,这样就导致了data命令时区正确,而java的时区是错误的!

如上图所示:CentOS7是通过符号链接到/usr/share/zoneinfo/下的时区文件的,如果通过cp指令只会修改原时区文件内容,这样,通过date的系统命令,查看时间是OK的,可是java是通过读取文件名的方式确认时区信息的。所以时区还是纽约。

如何将linux 的本地时间设置为utc时间

如果你的 Linux系统时区配置不正确,必需要手动调整到正确的当地时区。NTP对时间的同步处理只计算当地时间与 UTC时间的偏移量,因此配置一个 NTP对时间进行同步并不能解决时区不正确的问题。所以大家在用了国外云计算服务商如 Microsoft Azure或其它 VPS、虚拟机时,需要注意是否与中国大陆的时区一致。

查看Linux当前时区

你可以使用如下命令非常容易地就查看到 linux系统的当前时区:

date

ls-l/etc/localtime

linux-time02

获取时区TZ值

要更改 Linux系统时区首先得获知你所当地时区的 TZ值,使用 tzselect命令即可查看并选择已安装的时区文件。

执行 tzselect命令

linux-time03

通过向导选择你所在大洲、国家和城市

tzselect最终将以 Posix TZ格式(例如 Asia/Shanghai)输出你所在的时区值,将此记录下来。

linux-time03

更改每个用户的时区

Linux用户一个多用户系统,每个用户都可以配置自己所需的时区,你可以为自己新增一个 TZ环境变量:

export TZ='Asia/Shanghai'

执行完成之后需要重新登录系统或刷新~/.bashrc生效。

source~/.bashrc

更改Linux系统时区

要更改 Linux系统整个系统范围的时区可以使用如下命令:

sudo rm-f/etc/localtime

sudo ln-s/usr/share/zoneinfo/Asia/Shanghai/etc/localtime

注意:/usr/share/zoneinfo/Asia/Shanghai中的具体时区请用自己获取到的 TZ值进行替换。

使用Systemd更改Linux系统时区

如果你使用的 Linux系统使用 Systemd,还可以使用 timedatectl命令来更改 Linux系统范围的时区。在 Systemd下有一个名为 systemd-timedated的系统服务负责调整系统时钟和时区,我们可以使用 timedatectl命令对此系统服务进行配置。

sudo timedatectl set-timezone'Asia/Shanghai'

linux-time05

最后,如果你发现 Ubuntu与 Windows双系统时间不同步,可以参考我们之前的文章说明和解决办法。

linux 怎么设置硬件时钟 UTC

一、首先要弄清几个概念:

1.“系统时间”与“硬件时间”

系统时间:一般说来就是我们执行 date命令看到的时间,linux系统下所有的时间调用(除了直接访问硬件时间的命令)都是使用的这个时间。

硬件时间:主板上BIOS中的时间,由主板电池供电来维持运行,系统开机时要读取这个时间,并根据它来设定系统时间(注意:系统启动时根据硬件时间设定系统时间的过程可能存在时区换算,这要视具体的系统及相关设置而定)。

2.“UTC时间”与“本地时间”

UTC时间:Coordinated Universal 8 e2 i( H7 t0 ^/ ^Time世界协调时间(又称世界标准时间、世界统一时间),在一般精度要求下,它与GMT(Greenwich Mean Time,格林威治标准时间)是一样的,其实也就是说 GMT≈UTC,但 UTC是以原子钟校准的,更精确。

本地时间:由于处在不同的时区,本地时间一般与UTC是不同的,换算方法就是

本地时间= UTC+时区或 UTC=本地时间-时区

时区东为正,西为负,例如在中国,本地时间都使用北京时间,在linux上显示就是 CST(China Standard Time,中国标准时,注意美国的中部标准时Central Standard Time也缩写为CST,与这里的CST不是一回事!),时区为东八区,也就是+8区,所以 CST=UTC+(+8小时)或 UTC=CST-(+8小时)。

二、设置硬件时钟 UTC

硬件时间/sbin/hwclock

直接调用/sbin/hwclock显示的时间就是 BIOS中的时间吗?未必!这要看/etc/sysconfig/clock中是否启用了UTC,如果启用了UTC(UTC=true),显示的其实是经过时区换算的时间而不是BIOS中真正的时间,如果加上--localtime选项,则得到的总是 BIOS中实际的时间.

[12-01 19:07>~]# hwclock

2009年12月07日星期一 14时28分43秒-0.611463 seconds

[12-01 19:07>~]# hwclock--utc

2009年12月07日星期一 14时28分46秒-0.594189 seconds

[12-01 19:07>~]# hwclock--localtime

2009年12月07日星期一 06时28分50秒-0.063875 seconds

三、最后总结

1)/etc/sysconfig/clock文件,只对 hwclock命令有效,且只在系统启动和关闭的时候才有用(修改了其中的 UTC=true到 UTC=false的前后,执行 hwclock(--utc,或--localtime)都没有变化,要重启系统后才生效);

2)/etc/rc.d/rc.sysinit文件,run once at boot time,其中有从硬件时钟同步时间到系统时间的操作;

3)hwclock--localtime的输出,才是硬件时钟真正的时间。如果输出结果带时区(比如CST),还要看/etc/sysconfig/clock里的UTC参数,如果 UTC=false,那时区有意义;如果 UTC=true,那时区没意义,实际上是UTC时间。

4)在/etc/sysconfig/clock中 UTC=false时,date、hwclock、hwclcok--localtime输出的时间应该都一致,且此时 hwclock--utc是没有意义的;

5)在/etc/sysconfig/clock中 UTC=ture时,date、hwclock的输出是一致的,hwclock--localtime的输出则是UTC时间;

6)如果不想在输出中带时区,则 export LANG=C,然后再运行 hwclock就没有什么CST了,免得时区误导你;

7)hwclock--utc容易理解出错

8)系统关闭时会同步系统时间到硬件时钟,系统启动时会从硬件时钟读取时间更新到系统,这2个步骤都要根据/etc/sysconfig/clock文件中UTC的参数来设置时区转换。

阅读剩余
THE END