【问题标题】:Python/Django: Need a ListBox/Dropdown with pytz common_timezones name each difference for UTC (offsets)Python/Django:需要一个带有 pytz common_timezones 的 ListBox/Dropdown 名称每个 UTC 差异(偏移量)
【发布时间】:2013-01-14 17:05:09
【问题描述】:

需要一个带有 pytz common_timezones 的 ListBox/Dropdown 命名每个 UTC 的差异。

<select style="cursor:pointer; min-width: 300px;" name="timezone">
    {% for tz in timezones %}
        <option value="{{ tz }}"{% if tz == TIME_ZONE %} selected="selected"{% endif %}>{{ tz }}</option>
    {% endfor %}
</select>

我正在为该列表提供: 'timezones':pytz.common_timezones,'TIME_ZONE':request.session['django_timezone'] 在呈现响应时...

但我只得到一个名称列表。我需要一个名称列表,每个时区的 UTC 差异。

示例:

美国/XYZ UTC-xxxx/UTC-xxxx+1

欧洲/XPTO UTC+xxxx

已编辑:我很乐意在这一刻(这一刻)获得每个时区的当前已知偏移量,如此处显示的 http://www.timeanddate.com/worldclock/),如果可能的话,去年产生一/两年(可能性如下:http://www.timeanddate.com/library/abbreviations/timezones/) .

提前感谢您提供的任何帮助!

【问题讨论】:

  • 你所说的“差异”是什么意思?对于大多数时区,它会随时间而变化。您是指当前时刻的偏移量吗?历史上所有可能的偏移量?某个时间段(例如 2000 年到 2030 年)内所有可能的偏移量?
  • 你是对的,因为 DST.. 对吧?!目前就足够了..过去两年会很好...顺便说一句,既然您回答了并且您是谁,您在stackoverflow上几天前就注意到了您(检查了您压倒性的个人资料),我会很高兴得到国王的回答:P
  • 嗯,DST 和时区会随着时间发生根本性的变化。我现在不能看,但是如果稍后当我有更多时间时没有其他人回答,我会试一试。请注意,我不是 Python 人...
  • 请编辑您的问题并澄清您的要求,正如@JonSkeet 指出的那样。

标签: python html django timezone pytz


【解决方案1】:

我来到了这个:

def get_timezones_with_gmt_diff(timezone_string_list = None):
    """
    Converts a datetime object into string.
    """
    if timezone_string_list:
        timezone_list = timezone_string_list
    else:
        timezone_list = pytz.common_timezones

    datetime1 = datetime.strptime("10-07-%s 00:00:00" % datetime.utcnow().year, "%d-%m-%Y %H:%M:%S")
    datetime2 = datetime.strptime("10-12-%s 00:00:00" % datetime.utcnow().year, "%d-%m-%Y %H:%M:%S")

    result_dict = {}
    for time_zone in timezone_list:
        result_dict[time_zone] = [Date.timedelta_in_seconds(pytz.timezone(time_zone).localize(datetime1).tzinfo._utcoffset)/3600,
                                  Date.timedelta_in_seconds(pytz.timezone(time_zone).localize(datetime2).tzinfo._utcoffset)/3600,
                                  time_zone.replace("/", " - ").replace("_", " "),
                                  Date.timedelta_in_seconds(pytz.timezone(time_zone).localize(datetime1).tzinfo._utcoffset)/3600 !=
                                  Date.timedelta_in_seconds(pytz.timezone(time_zone).localize(datetime2).tzinfo._utcoffset)/3600]

    sorted_result_dict = OrderedDict(sorted(result_dict.items(), key=lambda t: t[1][2]))
    return sorted_result_dict

def get_timezones_for_listbox(time_zones_dict):
    list = []
    for time_zone_tuple in time_zones_dict:
        # Has different DST/Summer times:
        if time_zones_dict[time_zone_tuple][3]:
            new_item = "%s      UCT %s/%s" % (str(time_zones_dict[time_zone_tuple][2]), str(time_zones_dict[time_zone_tuple][0]), str(time_zones_dict[time_zone_tuple][1]))
        # Does not change datetime:
        else:
            new_item = "%s      UCT %s" % (str(time_zones_dict[time_zone_tuple][2]), str(time_zones_dict[time_zone_tuple][0]))
        list.append(new_item)
    return list

def timedelta_in_seconds(duration):
    days, seconds = duration.days, duration.seconds
    return days * 24 * 60 * 60 + seconds

当然,我会进一步操作这两种方法,以便从我的输入上下文中完成所需的输出。

【讨论】:

    【解决方案2】:
     {% load tz %}
    
     <select style="cursor:pointer; min-width: 300px;" name="timezone">
         {% for tz in timezones %}
        <option value="{{ tz }}"{% if tz == TIME_ZONE %} selected="selected"{% endif %}>
            {{ tz }} - {{tz|utc}}
        </option>
        {% endfor %}
     </select>
    

    【讨论】:

      猜你喜欢
      • 2012-12-14
      • 2018-02-12
      • 2016-09-05
      • 2011-07-29
      • 2013-11-27
      • 2015-02-14
      • 2016-08-24
      • 2016-05-07
      • 2016-05-02
      相关资源
      最近更新 更多