机器之间Python的datetime strptime()不一致

标签 python datetime timezone cross-platform python-dateutil

我被难住了。我编写的日期清理函数在我的 Mac 上可以在 Python 2.7.5 中运行,但在我的 Ubuntu 服务器上不能在 2.7.6 中运行。

Python 2.7.5 (default, Mar  9 2014, 22:15:05) 
[GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from datetime import datetime
>>> date = datetime.strptime('2013-08-15 10:23:05 PDT', '%Y-%m-%d %H:%M:%S %Z')
>>> print(date)
2013-08-15 10:23:05

为什么这在 Ubuntu 2.7.6 中不起作用?

Python 2.7.6 (default, Mar 22 2014, 22:59:56) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from datetime import datetime
>>> date = datetime.strptime('2013-08-15 10:23:05 PDT', '%Y-%m-%d %H:%M:%S %Z')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/_strptime.py", line 325, in _strptime
    (data_string, format))
ValueError: time data '2013-08-15 10:23:05 PDT' does not match format '%Y-%m-%d %H:%M:%S %Z'

编辑:我尝试使用小写 %z 的时区偏移量,但仍然出现错误(尽管是不同的错误):

>>> date = datetime.strptime('2013-08-15 10:23:05 -0700', '%Y-%m-%d %H:%M:%S %z')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/_strptime.py", line 317, in _strptime
    (bad_directive, format))
ValueError: 'z' is a bad directive in format '%Y-%m-%d %H:%M:%S %z'

最佳答案

时区缩写不明确。 For example , EST 可以表示东方标准 美国的时间,或者可能是澳大利亚的东部夏令时。

因此,不能将包含时区缩写的日期时间字符串 可靠地解析为时区感知日期时间对象。

strptime'%Z' 格式将只匹配 UTC、GMT 或时区缩写 列在 time.tzname 中,它依赖于机器语言环境。

如果您可以将日期时间字符串更改为包含 UTC 偏移量的字符串,那么 你可以使用 dateutil将字符串解析为可识别时区的日期时间对象:

import dateutil
import dateutil.parser as DP
date = DP.parse('2013-08-15 10:23:05 -0700')
print(repr(date))
# datetime.datetime(2013, 8, 15, 10, 23, 5, tzinfo=tzoffset(None, -25200))

关于机器之间Python的datetime strptime()不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25774070/

相关文章:

java - H2 设置默认时区

python - 为什么我不断收到位置参数错误?

python - 将 csv 放入列表中,访问最后一列中的空白区域会给出索引超出范围

python - 将 datetime.date 对象与 datetime.datetime 对象中的时间字符串组合

php - MySQL比较具有时差的日期

javascript - FullCalendar:默认时区,与客户的位置无关

java 日历时区 奇怪的东西

python - 作为另一个用户使用 python 子进程时环境错误

python - Pandas 将项目添加到一系列列表数据类型

javascript - 如何将日期和时间合并为 Google Apps 电子表格脚本中的日期时间?