ILD

Specifying the Time Zone with TZ
作者:Yuan Jianpeng 邮箱:yuanjp89@163.com
发布时间:2020-5-5 站点:Inside Linux Development

    使用C库的接口获取localtime相关的时间时,需要指定时区,在POSIX系统里,用户通过TZ环境变量的方式指定时区。


    通常不需要设置TZ,因为系统通常已经配置好了。但是通过TZ我们可以获得特定时区的时间。比如:

1
2
$ TZ=EST+5 date
Tue 05 May 2020 09:42:34 AM EST

    POSIX.1系统,TZ变量的值有3种形式,GNU C Library最常用的是最后一种形式,指定一个time zone database的路径,前两种格式直接指定time zone信息。


    POSIX.1标准只详细规范了前两种格式。


    第一种,指定一个名字和偏移,不支持 Daylight Saving Time ( or summer time)。

    std offset

    std指定时区的名字,至少3个字符,不能包含开头的冒号,数字,逗号,加减号,std和offset之间没有空白。偏移的格式为 [+|-]hh[:mm[:ss]]

    举个例子:

    EST+5


    第二种格式:

    std offset dst [offset],start[/time],end[/time]

    具体参考glibc手册。


    第三种格式,使用一个冒号跟一个路径,这个路径指定的是个database文件。在GNU C Libarary,默认的时区是TZ:=/etc/localtime,或者是TZ:=/usr/local/etc/localtime,依赖于C库的配置。


    在我的ubuntu系统中,所有的时区数据库放在/usr/share/zoneinfo,/etc/localtime指向其中的一个数据库:

$ ls -l /etc/localtime
lrwxrwxrwx 1 root root 34 Nov 25 22:09 /etc/localtime -> /usr/share/zoneinfo/Asia/Chongqing


参考:

GNU C library manual.




Copyright © linuxdev.cc 2017-2024. Some Rights Reserved.