Python:将当地时间转换为另一个时区
我想在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,过几天就开始夏令时了)