Python:将本地时间转换为另一个时区

时间:2011-03-12 05:06:04

标签: python time

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

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

我读过这不包含在Python中,你必须使用像pytz这样的东西。

我不想在服务器或全局上更改它,只是在这一个实例中。

5 个答案:

答案 0 :(得分:9)

  

我想在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转换和其他时区更改,您可能会得到错误的结果。如果你需要在datetime对象上做一些算术;首先将它们转换为UTC。

答案 1 :(得分:9)

将数据从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

答案 2 :(得分:7)

您可以改用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开始)

答案 3 :(得分:1)

万一你可以使用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))

答案 4 :(得分:0)

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

不幸的是,我相信,我在time模块中直接看到的唯一时区控件是全球工作的。