当前位置: 首页 > 面试题库 >

Python-使用strptime将带有偏移量的时间戳转换为datetime obj

刘和正
2023-03-14
问题内容

我正在尝试使用strptime方法将格式为“ 2012-07-24T23:14:29-07:00”的时间戳转换为python中的datetime对象。问题出在最后的时间偏移量(-07:00)。没有偏移量,我就可以成功地做到

time_str = "2012-07-24T23:14:29"

time_obj=datetime.datetime.strptime(time_str,'%Y-%m-%dT%H:%M:%S')

但是我尝试了偏移

time_str = "2012-07-24T23:14:29-07:00"

time_obj=datetime.datetime.strptime(time_str,'%Y-%m-%dT%H:%M:%S-%z').

但是它给出了一个Value错误,说“ z”是一个错误的指令。

有什么解决办法吗?


问题答案:

Python 2 strptime()函数确实不支持%z时区格式(因为基础time.strptime()函数不支持时区)。您有两种选择:

使用进行解析时,忽略时区strptime

time_obj = datetime.datetime.strptime(time_str[:19], '%Y-%m-%dT%H:%M:%S')

使用dateutil模块,它的解析功能确实处理时区:

from dateutil.parser import parse
time_obj = parse(time_str)

在命令提示符下快速演示:

>>> from dateutil.parser import parse
>>> parse("2012-07-24T23:14:29-07:00")
datetime.datetime(2012, 7, 24, 23, 14, 29, tzinfo=tzoffset(None, -25200))

您还可以升级到Python 3.2或更高版本,如果%z您:从输入中删除了最后一个,并且在-之前删除了from ,则时区支持已被改进到可以使用的程度%z:

>>> import datetime
>>> time_str = "2012-07-24T23:14:29-07:00"
>>> datetime.datetime.strptime(time_str, '%Y-%m-%dT%H:%M:%S%z')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/mj/Development/Library/buildout.python/parts/opt/lib/python3.4/_strptime.py", line 500, in _strptime_datetime
    tt, fraction = _strptime(data_string, format)
  File "/Users/mj/Development/Library/buildout.python/parts/opt/lib/python3.4/_strptime.py", line 337, in _strptime
    (data_string, format))
ValueError: time data '2012-07-24T23:14:29-07:00' does not match format '%Y-%m-%dT%H:%M:%S%z'
>>> ''.join(time_str.rsplit(':', 1))
'2012-07-24T23:14:29-0700'
>>> datetime.datetime.strptime(''.join(time_str.rsplit(':', 1)), '%Y-%m-%dT%H:%M:%S%z')
datetime.datetime(2012, 7, 24, 23, 14, 29, tzinfo=datetime.timezone(datetime.timedelta(-1, 61200)))


 类似资料:
  • 我需要将查询中的日期值转换为带有时区的时间戳,但目前我得到的时区区域(“欧洲/巴黎”)是EF使用的无效区域。 例如,在执行此操作时:

  • 问题内容: 我需要在查询中将DATE值转换为带时区的TIMESTAMP,但目前我正在获取不能被EF使用的时区(欧洲/巴黎)。 例如,执行此操作时: 我目前得到此输出: 但我需要像这样: 任何想法如何做到这一点? 问题答案: 您可以将转换为,然后使用将此时间戳转换为具有时区的时间戳:

  • 我有一个格式为“2019-04-25T16:34:28-05:00”的字符串。我已经通过模式“yyyy-mm-dd't'hh:mm:ssz”通过joda-time解析了字符串。 它在DateTime中给出的输出是“2019-04-25t15:34:28.000-06:00”。

  • 这是我在申请表中得到的日期: 将psqlDate转换为joda的最佳方式是什么? [编辑] 我可以使用解析方法。它可以很好地使用时间戳,它可以使用T-分割日期和时间的信息。 这应该与良好的模式一起工作: 带有时区的PostgreSQL时间戳的正确模式是什么?

  • 我有一个UTC的时间戳。我将其转换为本地时间。我的时区是CET/CEST。 由于我的时区,系统会自动应用正确的偏移量:如果我在夏天转换时间戳,它会自动添加2小时(无论何时转换),如果在冬天,它会添加1小时。 到目前为止-很好。 现在,我想基于另一个引用的时间戳转换UTC时间戳。如果引用在夏季,则应始终添加2小时-无论转换的时间戳是夏季还是冬季-如果引用在冬季,则应始终添加1小时。 那么,如果我的系

  • 我需要能够将从存储在“日期时间”字段中的MySQL数据库中获取的数据转换为Java对象。 我遇到的问题是将本地时间偏移量添加到对象,我不需要它,因为日期时间已经以UTC格式存储在数据库中。所以当我运行以下代码时: 我得到: 我需要时间部分保持不变。 我找不到任何明显的解决问题的方法,所以我在这里错过了什么吗?