2011-03-12 138 views
6

我想在Python中将当前时间转换为+0900。Python:将本地时间转换为另一个时区

什么是适当的方式来做到这一点(假设在时间模块中)?

我读过这不包括在Python中,你必须使用类似pytz的东西。

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

回答

6

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

+0

谢谢。很好的答案!您还可以添加'print datetime.utcnow()'来显示时间的完整图片 - 您的本地,UTC和移动时间。 – 2014-12-01 12:32:23

0

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

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

9

我想将电流转换Python中的时间为+0900 ...
我不想在服务器基础上或全局范围内更改它,只是在这一个实例中。

为了获得当前时间+0900时区UTC的偏移量:

from datetime import datetime, timedelta 

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

不要使用意识到datetime对象,除非你还使用pytz库,否则你可能会由于DST过渡和其它时区错误的结果变化。如果你需要对datetime对象进行一些算术操作;首先将它们转换为UTC。

+0

这完全是我所需要的。谢谢! – Tensigh 2017-03-31 16:11:08

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)) 
7

实施例用于从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 
+0

谢谢。你说'亚洲/加尔各答',但我怎么能看到一个可接受的时区字符串列表,例如亚洲/日本? – f126ck 2017-07-15 17:37:30

+0

我的意思是有一个命令withoin pytz打印所有时区字符串avilable? – f126ck 2017-07-15 17:38:10

+0

发现自己'print(pytz.all_timezones)' – f126ck 2017-07-15 17:41:17

相关问题