时区转换从PST-8 0到其字母名称



我有一个时区信息保存为"PST -8 0"。我想将其转换为等效的时区名称,例如America/Los_Angeles

是否有任何库或API可用于此转换?我正在为这个任务寻找BASH命令或PYTHON API。

首先,我不确定这种转换是否可能,请您对此发表评论。

虽然在某些特定情况下,您可以按照自己的要求执行操作,但在一般情况下,由于以下几个原因,您无法执行操作:

  • 时区缩写可能不明确。例如,"CST"有5种不同的含义。请参阅维基百科的时区缩写列表。

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

  • 时区偏移量并不完全表示时区。太平洋时间不是-8。冬天是-8,夏天是-7。它在夏令时时更改。

  • tzdb中的许多不同时区标识符在某个时间点共享相同的偏移量,有时甚至共享相同的缩写。对于您给出的示例,结果可以很容易地为America/Vancouver而不是America/Los_Angeles。在某些情况下,对于不同的时间点,可以匹配的各个区域将显著不同。请参阅维基百科上的tzdb区域列表,其中包括它们的偏移量。

检查pytz以获取Olson时区数据库的Python API。

正如评论中提到的,"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,和/或如果您有其他有助于选择过程的输入数据,则可以应用其他类型的逻辑。

当然,您可以调整正则表达式以适应其他输入变体。

最后,确保你考虑到马特·约翰逊在回答同一问题时提到的要点。

相关内容

  • 没有找到相关文章

最新更新