当前位置: 首页 > 面试题库 >

获取当地时区的Olson TZ名称?

邓仲卿
2023-03-14
问题内容

如何获得与C
调用给出的值相对应的Olson时区名称(例如Australia/Sydneylocaltime

这是通过TZ,通过符号链接/etc/localtimeTIMEZONE在与时间相关的系统配置文件中设置变量来覆盖的值。


问题答案:

我认为最好的选择是遍历所有pytz时区,并检查哪个匹配本地时区,每个pytz时区对象都包含有关utcoffset和tzname的信息,例如CDT,EST,可以从time.timezone/altzone和获取有关本地时间的相同信息time.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’, ‘America/Bahia_Banderas’, ‘America/Belize’, ‘America/Cambridge_Bay’, ‘America/Cancun’, ‘America/Chicago’, ‘America/Chihuahua’, ‘America/Coral_Harbour’, ‘America/Costa_Rica’, ‘America/El_Salvador’, ‘America/Fort_Wayne’, ‘America/Guatemala’, ‘America/Indiana/Indianapolis’, ‘America/Indiana/Knox’, ‘America/Indiana/Marengo’, ‘America/Indiana/Marengo’, ‘America/Indiana/Petersburg’, ‘America/Indiana/Tell_City’, ‘America/Indiana/Vevay’, ‘America/Indiana/Vincennes’, ‘America/Indiana/Winamac’, ‘America/Indianapolis’, ‘America/Iqaluit’, ‘America/Kentucky/Louisville’, ‘America/Kentucky/Louisville’, ‘America/Kentucky/Monticello’, ‘America/Knox_IN’, ‘America/Louisville’, ‘America/Louisville’, ‘America/Managua’, ‘America/Matamoros’, ‘America/Menominee’, ‘America/Merida’, ‘America/Mexico_City’, ‘America/Monterrey’, ‘America/North_Dakota/Beulah’, ‘America/North_Dakota/Center’, ‘America/North_Dakota/New_Salem’, ‘America/Ojinaga’, ‘America/Pangnirtung’, ‘America/Rainy_River’, ‘America/Rankin_Inlet’, ‘America/Resolute’, ‘America/Resolute’, ‘America/Tegucigalpa’, ‘America/Winnipeg’, ‘CST6CDT’, ‘Canada/Central’, ‘Mexico/General’, ‘US/Central’, ‘US/East-Indiana’, ‘US/Indiana-Starke’]

在生产中,您可以预先创建这样的映射并保存它,而不必总是进行迭代。

更改时区后测试脚本:

$ export TZ=’Australia/Sydney’
$ python get_tz_names.py
[‘Antarctica/Macquarie’, ‘Australia/ACT’, ‘Australia/Brisbane’, ‘Australia/Canberra’, ‘Australia/Currie’, ‘Australia/Hobart’, ‘Australia/Lindeman’, ‘Australia/Melbourne’, ‘Australia/NSW’, ‘Australia/Queensland’, ‘Australia/Sydney’, ‘Australia/Tasmania’, ‘Australia/Victoria’]



 类似资料:
  • 问题内容: 我有一个存储在系统时间UTC中的mysql值。我需要将其转换为我在Django的本地时区。这是我目前拥有的: 我如何将last_updated值设为本地时区=“ America / Los Angeles”? 问题答案: 时区的Django文档记录了将对象转换为适当时区以进行显示的所有必要详细信息。 您的数据存储在UTC中,这很好。当您从数据库中获取字段对象时,它将是一个天真的对象。即

  • 问题内容: 我需要以[+/-] hh:mm的格式保存手机的时区 我正在使用TimeZone类来处理此问题,但是我只能获得以下格式: 我宁愿不对结果进行子串化,是否可以设置任何键或选项标志来仅获取值,而不获取该时区的名称(GMT / CET / PST …)? 问题答案: 我需要以[+/-] hh:mm的格式保存手机的时区 不,你没有。仅靠偏移量是不够的,您需要存储整个时区名称/ id。例如,我住在

  • 问题内容: 有人知道MySQL中是否有这样的功能吗? 更新 这不会输出任何有效的信息: 或者也许MySQL本身不知道确切使用了什么,那很好,我们可以在这里介入,只要我能获得不像… 问题答案: 从手册(第9.6节): 可以按以下方式检索全局时区和特定于客户时区的当前值: 编辑如果MySQL设置为系统时区的从属,则以上内容将返回,没有帮助。由于您使用PHP,如果从MySQL的答案是,你可以接着问什么时

  • 问题内容: 我是Android的新手,根据当前时区,我目前面临获取当前时间的问题。 我以“ GMT-7”格式获取时区,即字符串。而且我有系统时间。 有没有一种干净的方法来获取上述给定时区中的当前时间?任何帮助表示赞赏。谢谢, 编辑:试图做到这一点: 问题答案: 我让它像这样工作: 此外,基于该日期的其他所有时间转换也应与此时区一起使用,否则,将使用设备的默认时区,并且将基于该时区转换时间。

  • 在Powershell中,我使用命令Register ScheduledJob-ScriptBlock{…}创建了一个ScheduledJob。此ScheduledJob执行脚本块。如何从ScriptBlock检索当前运行的ScheduledJob的名称? 例如。 Windows任务计划程序中的任务正在运行以下命令: powershell.exe-NoLogo-NonInteractive-Win

  • 问题内容: 我想使用Java代码获取不同时区的本地时间。基于传递给函数的时区,我需要该时区的本地时间。如何实现呢? 问题答案: