【问题标题】:Handling of timezones in strptime in Python [duplicate]Python中strptime中时区的处理[重复]
【发布时间】:2016-09-27 07:02:37
【问题描述】:

我有两个这样的字符串:

"Sun 10 May 2015 13:54:36 -0700"
"Sun 10 May 2015 13:54:36 +0000"

(最后一部分是时区 -0700 表示比 GMT 少 7 小时)
我的意图是将其转换为 unix 时间戳,以便轻松找到它们的绝对差异。

我的问题是是否有将这些格式化文本转换为 Unix 时间戳的内置方法?或者是否有一个直接计算两个这样的字符串的差异?

编辑: 此问题与This one 不同,因为该问题不包括时区,并且该问题的任何答案均未提及有关时区的任何内容。

【问题讨论】:

  • @schwobaseggl 我在你提到的问题中找不到答案,因为没有人告诉那里的时区:-(
  • @schwobaseggl dateutil 看起来很完美,但它没有与 python 标准库绑定,我会正确编辑问题。
  • 你用的是哪个版本的python?
  • @Vishwa 我使用hackerrank.com python2 或者我可以使用python 3 如果它能解决任何问题

标签: python date datetime time timezone


【解决方案1】:

这应该适用于 Python 3 及更高版本,但不知道适用于 Python 2 上的所有平台。

date_str = "Sun 10 May 2015 13:54:36 -0700"
pattern =  '%a %d %B %Y %H:%M:%S %z'
dt = int(time.mktime(time.strptime(date_str ,pattern )))
print(dt)

对于 Python 2.7+,(不带 %z

import datetime
date_str = "Sun 10 May 2015 13:54:36 -0700"

dt_str = date_str[:-5].strip()
dt_zone = int(date_str[-5:])/100
pattern =  '%a %d %B %Y %H:%M:%S'

dtobj = datetime.datetime.strptime(dt_str ,pattern)
dt = dtobj + datetime.timedelta(hours=dt_zone)
print( dt.strftime('%s') )

【讨论】:

  • @Fazel 没用吗?
  • Python 2 解决方案不适用于具有小数小时偏移的时区。
  • 另外你还有一个额外的条带
【解决方案2】:

此代码回答您的问题:

from datetime import timedelta, datetime, tzinfo
date1="Sun 10 May 2015 13:54:36 -0700"   

date2=date1[4:-6]

zone = int(date1[-5:])/100

d=datetime.strptime(date2, "%d %B %Y %H:%M:%S")

class TZ(tzinfo):
   def utcoffset(self, dt): return timedelta(hours=zone)

d=datetime(d.year, d.month, d.day,d.hour,d.minute,d.second, tzinfo=TZ()).isoformat(' ')


print d

【讨论】:

  • 即使它确实有效,对 IMO 的编码也是非常值得怀疑的,包括丢弃原始偏移量的分钟数以及在方法中使用全局变量作为默认值。
  • 什么是 IMO 编码
  • 在我看来。另一个答案有类似的问题。
  • 是的,你说得对,我放代码的时候没看到
猜你喜欢
  • 2011-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-16
  • 2020-02-20
  • 2013-08-15
相关资源
最近更新 更多