2011-04-04 141 views

回答

62

由于DST(夏令时),结果取决于一年的时间:

import datetime, pytz 

datetime.datetime.now(pytz.timezone('Asia/Jerusalem')).strftime('%z') 

# returns '+0300' (because 'now' they have DST) 


pytz.timezone('Asia/Jerusalem').localize(datetime.datetime(2011,1,1)).strftime('%z') 

# returns '+0200' (because in January they didn't have DST) 
25

您是否尝试过使用pytz项目和utcoffset method

例如

>>> import datetime 
>>> import pytz 
>>> pacific_now = datetime.datetime.now(pytz.timezone('US/Pacific')) 
>>> pacific_now.utcoffset().total_seconds()/60/60 
-7.0 
+23

等等...什么? Jon Skeet? Python!= C#!!!没有抱怨,只是吓了一跳。 – Russ 2011-06-29 05:39:31

+2

BTW,pytz的Ubuntu软件包是python-tz。 – 2012-04-23 18:06:11

+0

我不敢低估他,但utcoffset是日期时间对象的一种方法,尽我所知,所以它不提供这从时区名称。 – Tom 2013-04-26 21:04:06

0

我面临类似的问题,而从Python日期时间对象转换为UTC时间戳。我的日期时间是时区不可知的(非常天真),因此astimezone不起作用。

为了缓解这个问题,我做了我的日期时间对象时区知道,然后使用上述魔法。

import pytz 
system_tz = pytz.timezone(constants.TIME_ZONE) 
localized_time = system_tz.localize(time_of_meeting) 
fmt = "%Y%m%dT%H%M%S" + 'Z' 
return localized_time.astimezone(pytz.utc).strftime(fmt) 

在这里,constants.TIME_ZONE是我有我的持久对象的默认时区。

希望这可以帮助有人试图将python datetime对象转换为UTC。一旦转换后,请以任何方式格式化。