【问题标题】:Python: Convert local time to another time zonePython:将本地时间转换为另一个时区
【发布时间】:2011-07-13 22:25:37
【问题描述】:

我想在 Python 中将当前时间转换为 +0900。

这样做的适当方法是什么(假设在时间模块中)?

我已经阅读了 Python 不包含此内容,您必须使用 pytz 之类的东西。

我不想基于服务器或全局更改它,仅在这个实例中。

【问题讨论】:

标签: python time


【解决方案1】:

将数据从 UTC 转换为 IST 的示例

from datetime import datetime
from pytz import timezone

format = "%Y-%m-%d %H:%M:%S %Z%z"

# Current time in UTC
now_utc = datetime.now(timezone('UTC'))
print now_utc.strftime(format)
Output: 2015-05-18 10:02:47 UTC+0000

# Convert to Asia/Kolkata time zone
now_asia = now_utc.astimezone(timezone('Asia/Kolkata'))
print now_asia.strftime(format)
Output: 2015-05-18 15:32:47 IST+0530

【讨论】:

  • 谢谢。您说“亚洲/加尔各答”,但我如何才能看到可接受的时区字符串列表,例如亚洲/日本?
  • 我的意思是 pytz 中是否有一个命令可以打印所有可用的时区字符串?
  • 找到了自己print( pytz.all_timezones)
  • now_asia = datetime.now(timezone('Asia/Kolkata')) 也可以。
  • 这不适用于 DST 中的未来时间,反之亦然。不考虑夏令时
【解决方案2】:

我想在 Python 中将当前时间转换为 +0900 ...
我不想在服务器基础上或全局上更改它,只是在这个实例中。

要获取 +0900 时区与 UTC 的偏移量的当前时间:

from datetime import datetime, timedelta

current_time_in_utc = datetime.utcnow()
result = current_time_in_utc + timedelta(hours=9)

除非您还使用 pytz 库,否则请勿使用可感知的日期时间对象,否则您可能会由于 DST 转换和其他时区更改而得到错误的结果。如果您需要对日期时间对象进行一些算术运算;首先将它们转换为 UTC。

【讨论】:

  • 这也正是我所需要的。谢谢!
  • 我想知道答案有什么问题,以便得到否决票,以便改进答案。
  • 完美适用于 IST,只需使用 hours=5, minutes=30
【解决方案3】:

您可以改用datetime module。改编自http://docs.python.org/library/datetime.html#datetime.tzinfo.fromutc

from datetime import tzinfo, timedelta, datetime

class FixedOffset(tzinfo):
    def __init__(self, offset):
        self.__offset = timedelta(hours=offset)
        self.__dst = timedelta(hours=offset-1)
        self.__name = ''

    def utcoffset(self, dt):
        return self.__offset

    def tzname(self, dt):
        return self.__name

    def dst(self, dt):
        return self.__dst

print datetime.now()
print datetime.now(FixedOffset(9))

给予:

2011-03-12 00:28:32.214000
2011-03-12 14:28:32.215000+09:00

当我运行它时(我又是 UTC-0500,然后 DST 开始)

【讨论】:

  • 谢谢。很好的答案!您还可以添加 print datetime.utcnow() 以显示时间的全貌 - 您的本地时间、UTC 时间和偏移时间。
【解决方案4】:

以防万一您可以使用 pytz 和其他外部模块,这是一个更直接的解决方案

pip install pytz tzlocal

然后

from datetime import datetime
from pytz import timezone
import pytz
from tzlocal import get_localzone

#timezones
local = get_localzone()
utc = pytz.utc
cet = timezone('CET')

#get now time in different zones
print(datetime.now(local))
print(datetime.now(cet))
print(datetime.now(utc))

#convert local time now to CET
print(datetime.now(local).astimezone(cet))
print(datetime.now(cet).astimezone(utc))

【讨论】:

    【解决方案5】:

    datetime 模块中,有一个名为tzinfo 的抽象基类,它控制datetime.datetimedatetime.time 如何处理时区。您基本上派生出自己的类来控制时区解释。我从来没有亲自使用过它,所以我不能多说。

    不幸的是,我认为,我在time 模块中直接看到的唯一时区控件在全球范围内工作。

    【讨论】:

      猜你喜欢
      • 2014-09-04
      • 2020-10-08
      • 2016-05-22
      • 2020-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-05
      • 1970-01-01
      相关资源
      最近更新 更多