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

19 投票
5 回答
42207 浏览
提问于 2025-04-16 13:32

我想在Python中把当前时间转换成+0900时区的时间。

请问怎么做比较合适呢(假设使用的是时间模块)?

我听说这个功能在Python里没有自带,需要用像pytz这样的库。

我不想在服务器上或者全局范围内改变时间,只想在这个特定的情况下使用。

5 个回答

15

我想在Python中把当前时间转换成+0900时区的时间。
我不想在服务器上或者全局范围内改变,只想在这个特定的情况下使用。

要获取当前时间并转换为+0900这个时区(相对于UTC时间):

from datetime import datetime, timedelta

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

不要使用带时区的日期时间对象,除非你也使用pytz库,否则可能会因为夏令时变化和其他时区调整而得到错误的结果。如果你需要对日期时间对象进行一些计算,最好先把它们转换成UTC时间。

28

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

你可以使用datetime模块来代替。这个内容改编自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,过几天就开始夏令时了)

撰写回答