如何使用UTC偏移量转换字符串

尼莱什

我有约会

In [1]: a = "Sun 10 May 2015 13:34:36 -0700"

当我尝试使用转换它时strptime,它给出了错误。

In [3]: datetime.strptime(a, "%a %d %b %Y %H:%M:%S %Z"
   ...: )
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-3-973ef1c6daca> in <module>()
----> 1 datetime.strptime(a, "%a %d %b %Y %H:%M:%S %Z"
      2 )
/usr/lib/python2.7/_strptime.pyc in _strptime(data_string, format)
    323     if not found:
    324         raise ValueError("time data %r does not match format %r" %
--> 325                          (data_string, format))
    326     if len(data_string) != found.end():
    327         raise ValueError("unconverted data remains: %s" %
ValueError: time data 'Sun 10 May 2015 13:34:36 -0700' does not match format '%a %d %b %Y %H:%M:%S %Z'
In [6]: datetime.strptime(a, "%a %d %b %Y %H:%M:%S %z")
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-6-e4870e34edda> in <module>()
----> 1 datetime.strptime(a, "%a %d %b %Y %H:%M:%S %z")
/usr/lib/python2.7/_strptime.pyc in _strptime(data_string, format)
    315                 del err
    316                 raise ValueError("'%s' is a bad directive in format '%s'" %
--> 317                                     (bad_directive, format))
    318             # IndexError only occurs when the format string is "%"
    319             except IndexError:
ValueError: 'z' is a bad directive in format '%a %d %b %Y %H:%M:%S %z'

根据文档,正确的格式为%z,但我可能会缺少某些部分。

克雷拉金

您的格式字符串是正确的,并且在Python 3.3中可以正常工作:

>>> a = "Sun 10 May 2015 13:34:36 -0700"
>>> datetime.strptime(a, "%a %d %b %Y %H:%M:%S %z")
datetime.datetime(2015, 5, 10, 13, 34, 36, tzinfo=datetime.timezone(datetime.timedelta(-1, 61200)))

它确实给出了Python 2.7中的错误。

与不同strftime(),它是通过调用libc函数strptime()来实现的,它是在Python库中实现的。在这里您可以看到Python 2.7中使用的版本不支持该z格式。另一方面,这里是Python 3.3的版本,它支持该版本(我认为这是在3.2左右添加的)。

因此,基本上,您有两种选择:

  1. 使用一些能够处理的外部库z
  2. 自己实现它(例如,从字符串中剥离时区,将第一部分馈入,strptime()然后手动解析第二部分)。在Python库中查看如何完成此操作可能会有所帮助。

我试图解析它以返回一个“感知”对象,但是它有些复杂。

>>> a = "Sun 10 May 2015 13:34:36 -0700"
>>> time, tz = a.rsplit(' ', 1)
>>> d = datetime.strptime(time, '%a %d %b %Y %H:%M:%S')
datetime.datetime(2015, 5, 10, 13, 34, 36)

现在,我必须致电d.replace(tzinfo=…tz…)替换时区,但问题是我无法获得实例,tzinfo因为仅知道UTC的偏移量不足以标识时区。

在Python 3.2中,有一个特殊的timezone类,它是tzinfo表示仅由其偏移量定义的“假”时区的子类因此,有两种方法可以进行:

  1. timezone从Python 3反向移植(基本上是复制和粘贴)该类,并在解析器中使用它。
  2. 返回一个“天真的”对象:

    >>> d + timedelta(hours=int(tz[1:]) * (1 if tz.startswith('-') else -1))
    datetime.datetime(2015, 6, 8, 17, 34, 36)
    

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将具有UTC偏移量的字符串转换为日期时间对象

如何使用偏移量将YYYYMMDDHHMMSS转换为UTC

使用偏移量将字符串日期转换为DateTimePST(String)和DateTimeLocal(String)?

Python使用时区偏移量转换日期/时间字符串

如何忽略字符串日期时间的偏移量

如何使用bsoup在xml中查找字符串偏移量?

如何使用go在符文中找到偏移量索引字符串

在JavaScript中给定TimeZone字符串的情况下计算UTC偏移量

帶有 UTC 偏移量和時區的字符串中的 UNIX 超時

如何通过Javascript获取句子中选定的字符串偏移量开始和偏移量结束

接收包括字符串的时区偏移量的日期,并使用该时区转换为其他格式

将时区pytz字符串转换为python / django中的偏移量

转换为缺少的加号偏移量datetime字符串为正确的datetime

在PHP中发生了字符串偏移量强制转换的正确解决方案

将时区字符串(即美国/东部)转换为偏移量

熊猫数据帧日期时间 - 将字符串转换为日期时间偏移量

非法字符串偏移量未定义偏移量:2

如何从tcpdump输出获取from..to偏移量以与iptables字符串匹配模块一起使用

在字符串中查找元素的偏移量

Laravel-非法字符串偏移量

警告:字符串偏移量非法

非法的字符串偏移量警告PHP

CakePHP非法字符串偏移量

PHP中的非法字符串偏移量错误

带有偏移量的子字符串反转

非法字符串偏移量'名称'laravel PHP

警告:非法字符串偏移量“ Opencart 2.1”

警告:“姓氏”的字符串偏移量非法

PHP-数组-非法的字符串偏移量