【发布时间】:2011-04-27 07:45:41
【问题描述】:
我得到了服务器日期,我需要得到这个日期与 GMT 的差异
我明白了
Datetime = "2011-04-27 2:17:45"
我想得到类似的结果
Datetime = "2011-04-27 2:17:45 +0500"
【问题讨论】:
我得到了服务器日期,我需要得到这个日期与 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'
【讨论】:
pytz.timezone('Europe/Paris') 评估为 +0100 或 +0200 取决于冬季/夏季,20 或 30 年前甚至不同。所以你必须通过datetime对象本身。
根据您给出的示例,在我看来您正在寻找的是datetime.isoformat。页面中的示例显示了如何将日期时间值转换为带有时区信息的 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 模块和相关类。
【讨论】:
日期时间标准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 时区的偏移量,以 UTC 以西的秒数(如果已定义)。如果当地 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
没有比这更干净的了。
【讨论】: