我得到了服务器日期,我需要得到这个日期与GMT的差值
我得到
Datetime = "2011-04-27 2:17:45"
我希望得到的结果是
Datetime = "2011-04-27 2:17:45 +0500"
试试这个:
import datetime, pytz
now = datetime.datetime.now(pytz.timezone('Asia/Kolkata'))
print now.strftime('%Y-%m-%d %H:%M:%S %z')
# prints: '2011-04-27 13:56:09 +0530'
从你给的例子,它看起来给我,你正在寻找的是datetime.isoformat。该页中的示例显示了如何使用时区信息将datetime值转换为ISO格式。
要做到这一点,必须知道服务器日期的时区(或UTC偏移量)。你在这里得到的是一个"朴素"日期,没有时区信息,你无法猜测UTC的差异。
我认为datetime
模块是你需要的:
>>> from datetime import datetime
>>> datetime.now()
datetime.datetime(2011, 4, 27, 11, 8, 26, 149000)
>>> datetime.utcnow()
datetime.datetime(2011, 4, 27, 8, 8, 47, 712000)
两个日期之间的差值:
>>> dtnow = datetime.now()
>>> dtutc = datetime.utcnow()
>>> dtnow - dtutc
datetime.timedelta(0, 10792, 847000)
在Python文档中查找datetime
模块和相关类
datetime标准python库的一个非常强大的扩展是dateutil,它允许您轻松地:
- 设置你的时区: 使用各种方便的选项解析日期(在我们的例子中,我们将使用
default
选项,这将允许我们设置时区)因此第一个设置时区,并使用该时区的默认日期:
>>> from datetime import datetime
>>> from dateutil import parser
>>> from dateutil.tz import tzoffset
>>> tz_plus_5 = tzoffset(None, 5 * 60 * 60) # offset is in seconds !
>>> default = datetime.now(tz_plus_5)
现在在解析中使用这个默认日期:
>>> Datetime = "2011-04-27 2:17:45"
>>> my_date = parser.parse(Datetime, default=default)
>>> my_date
datetime.datetime(2011, 4, 27, 2, 17, 45, tzinfo=tzoffset(None, 18000))
>>> my_date.strftime("%Y-%m-%d %H:%M:%S %z")
'2011-04-27 02:17:45 +0500'
对于那些只需要获得本地时间和UTC之间的偏移量的人,time
模块有一个属性time.altzone
,以秒为单位指定UTC和本地时间之间的差异:
本地DST时区的偏移量,单位是秒,如果有定义的话。如果当地DST时区位于UTC以东(如在西欧,包括英国),则此值为负值。仅当日光非零时使用。
下面是它如何工作的一个例子:
>>> datetime.now().isoformat()
'2011-09-01T17:26:46.971000'
>>> datetime.utcnow().isoformat()
'2011-09-01T15:27:32.699000'
>>> time.altzone / (60*60)
-2
没有比这更干净的了