【问题标题】:convert timezone pytz string to offset in python/django在 python/django 中将时区 pytz 字符串转换为偏移量
【发布时间】:2021-03-02 07:38:53
【问题描述】:

我正在使用 django/python

如何将 pytz 时区字符串(例如“Asia/Kuala_Lumpur”)转换为偏移信息(“+0800”或“80”)。

我在这里找不到确切的功能:https://docs.djangoproject.com/en/3.1/topics/i18n/timezones/

我想像这样在 moment.js 中使用它: Format date in a specific timezone

所以问题是: 'Asia/Kuala_Lumpur' --> 转换为 ---> '+0800'

【问题讨论】:

  • 问题是时区不仅仅是一个偏移量。它带有一组规则,如夏令时、在 DST 之间移动的日期等,以及过去的变化历史。

标签: python django timezone django-timezone


【解决方案1】:

时区不是偏移量。如何计算给定日期时间的偏移量是一组规则。这意味着当前的规则,例如关于夏令时 (DST) 的规则,以及对日历进行(小)更改的历史规则。

您可以通过以下方式确定当前日期时间(或其他日期时间)的偏移量:

>>> import pytz
>>> from datetime import datetime
>>> pytz.timezone('Asia/Kuala_Lumpur').localize(datetime.utcnow()).strftime('%z')
'+0800'

例如对于布鲁塞尔时间,两个不同的时间戳可以给出两个不同的偏移量:

>>> tz = pytz.timezone('Europe/Brussels')
>>> tz.localize(datetime.utcnow()).strftime('%z')
'+0100'
>>> tz.localize(datetime(2020,5,1)).strftime('%z')
'+0200'

例如平壤在 2018 年 5 月 4 日更改了时区:

>>> pytz.timezone('Asia/Pyongyang').localize(datetime(2018,5,4)).strftime('%z')
'+0830'
>>> pytz.timezone('Asia/Pyongyang').localize(datetime(2018,5,5)).strftime('%z')
'+0900'

因此,您不能简单地将时区映射到偏移量上。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-29
    • 2021-05-18
    • 1970-01-01
    • 2013-08-10
    • 2019-04-08
    • 1970-01-01
    • 1970-01-01
    • 2017-04-24
    相关资源
    最近更新 更多