如何得到C的localtime调用给出的值对应的Olson timezone name(比如Australia/Sydney)?

这是通过TZ、符号链接/etc/localtime或在时间相关系统配置文件中设置TIMEZONE变量覆盖的值.

推荐答案

我认为最好的办法是遍历所有pytz时区,判断哪一个与本地时区匹配,每个pytz时区对象包含关于utcoffset和tzname的信息,比如CDT、EST,可以从time.timezone/altzonetime.tzname中获得关于本地时间的相同信息,我认为这足以正确匹配pytz数据库中的本地时区.

import time
import pytz
import datetime

local_names = []
if time.daylight:
    local_offset = time.altzone
    localtz = time.tzname[1]
else:
    local_offset = time.timezone
    localtz = time.tzname[0]

local_offset = datetime.timedelta(seconds=-local_offset)

for name in pytz.all_timezones:
    timezone = pytz.timezone(name)
    if not hasattr(timezone, '_tzinfos'):
        continue#skip, if some timezone doesn't have info
    # go thru tzinfo and see if short name like EDT and offset matches
    for (utcoffset, daylight, tzname), _ in timezone._tzinfos.iteritems():
        if utcoffset == local_offset and tzname == localtz:
            local_names.append(name)

print local_names

输出:

['America/Atikokan'、'America/Bahia_Banderas',

在生产中,您可以事先创建这样的映射,并将其保存,而不是总是进行迭代.

更改时区后测试脚本:

$export TZ='澳大利亚/悉尼'

Linux相关问答推荐

pci_user_write_config_word在哪里实现?

如果在两种模式之间找到文本,则使用sed删除它们之间的所有行

Linux 的 __fastfail 替代方案?

如何在具有多种可能性的linux shell中获取最大值和最小值?

SessionNotCreatedException:无法启动新会话.响应代码 500 在远程服务器上的 Apache Tomcat/10.0.23 上使用 ChromeDriver

如何从 AWK 中的 CSV 列中获取中值? (Linux)

如何在Linux中将文件的特定行号中的数字乘以2(双)?

我有 ext2 格式的文件系统图像.我喜欢在终端中读取 Linux 特别是 Ubuntu 中的所有文件系统 struct 数据.有没有工具>

DMA 和内存映射 IO 有什么区别?

RealUID,保存的 UID,有效的 UID.这是怎么回事?

如何更改目录中所有文件中所有出现的单词

如何在没有 IDE 的情况下构建和部署三星 SmartTV 应用程序(例如:在 Linux 上)

scp 使用私钥身份验证将目录复制到另一台服务器

Linux 上真的没有异步块 I/O 吗?

在文件夹中的 gzip 文件中查找字符串

限制程序在 Linux 中运行的时间

将所有文件扩展名转换为小写

Anaconda 安装后,conda 命令失败并显示ImportError: no module named conda.cli

Bash:如何标记字符串变量?

Linux 目录列表中只有问号