从PST 8 0到其字母nam的时区转换

2024-06-07 00:47:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我将时区信息保存为"PST -8 0"。我想把它转换成等价的时区名称,例如America/Los_Angeles。你知道吗

是否有任何库或API在这个转换中有用?我正在为这个任务寻找BASH命令或pythonapi。你知道吗

我不确定这种转换是否可能首先和征求您的意见相同。你知道吗


Tags: 命令名称bashapi信息pythonapi意见等价
2条回答

查看pytz获取Olson timezone database的pythonapi。你知道吗

正如评论中提到的,“PST”部分可能不可靠。你知道吗

使用pytz,你可以在某种程度上解决这个问题。如果我们假设您要解析输入的数字部分,并忽略其前面的任何字符串,则它可能如下所示:

import pytz
import re
from datetime import datetime

def find_timezone_name(input):
    match = re.match(r'.*([+-]\d+) (\d+)', input)
    if match:
        offset = int(match.group(1))+int(match.group(2))/10.0
    else:
        raise ValueError('Unexpected input format')

    refdate = datetime.now()
    for tzname in pytz.common_timezones:
        tzinfo = pytz.timezone(tzname)
        tzoffset = tzinfo.utcoffset(refdate)
        if offset == tzoffset.total_seconds()/3600:
            return tzname
    return "Unknown"

print(find_timezone_name('PST -8 0'))

如果你想把时区限制在一个特定的列表中,你可以用其他的东西替换pytz.common_timezones,或者如果你有额外的输入数据来帮助你的选择过程,你可以应用其他类型的逻辑。你知道吗

当然,您可以调整regex以适应额外的输入变量。你知道吗

最后,请务必考虑马特·约翰逊在回答同一问题时提到的要点。你知道吗

虽然在某些特定情况下,您可以按自己的要求行事,但在常规情况下,您不能这样做,原因如下:

  • 时区缩写可能模棱两可。例如,"CST"有5种不同的含义。见Wikipedia's list of time zone abbreviations

  • 时区缩写并不统一和一致。维基百科的列表可能与其他地方的缩写列表有所不同。在世界上的一些地方,没有缩写在使用,其他地方争论什么是正确的缩写。

  • 时区偏移并不完全代表时区。太平洋时间不是零下八点。冬天是-8,夏天是-7。它在夏令时改变。

  • tzdb中的许多不同时区标识符在某个时间点共享相同的偏移量,有时甚至共享相同的缩写。对于您给出的示例,结果很容易是America/Vancouver,而不是America/Los_Angeles。在某些情况下,可以匹配的不同区域在不同的时间点会有很大的不同。请参阅the list of tzdb zones on Wikipedia,其中包括它们的偏移量。

相关问题 更多 >