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

将字符串转换为日期时间对象

殷浩慨
2023-03-14
问题内容

我试图将字符串转换为日期时间对象。我从新闻提要中获取的字符串格式如下:“星期四,2014年10月16日美国东部时间01:16:17”

我尝试使用datetime.strptime()进行转换。即

datetime.strptime('Thu, 16 Oct 2014 01:16:17 EDT','%a, %d %b %Y %H:%M:%S %Z')

并得到以下错误:

追溯(最近一次通话最近):
文件“”,第1行,位于datetime.strptime(’Thu,16 Oct 2014 01:16:17
EDT’,’%a,%d%b%Y%H:%M: %S%Z’)
文件“ C:\ Anaconda \ lib_strptime.py”,第325行,以_strptime(data_string,格式))
ValueError:时间数据’Thu,2014年10月16日01:16:17 EDT’与格式不匹配’%a,%d%b%Y%H:%M:%S%Z’

但是,如果我尝试不带“ EDT”的字符串,则它可以工作。即

datetime.strptime('Thu, 16 Oct 2014 01:16:17','%a, %d %b %Y %H:%M:%S')

有谁知道如何解析“ EDT”部分?


问题答案:

要以RFC
2822格式
解析日期,可以使用emailpackage:

from datetime import datetime, timedelta
from email.utils import parsedate_tz, mktime_tz

timestamp = mktime_tz(parsedate_tz("Thu, 16 Oct 2014 01:16:17 EDT"))
# -> 1413436577
utc_dt = datetime(1970, 1, 1) + timedelta(seconds=timestamp)
# -> datetime.datetime(2014, 10, 16, 5, 16, 17)

注意:parsedate_tz()假设EDT对应于-0400UTC偏移量,但是在EDT是澳大利亚的情况下可能不正确+1100pytz在这种情况下使用AEDT
),即时区缩写可能不明确。请参阅在Python中解析带有时区缩写名称的日期/时间字符串?

相关的Python错误:strptime中的%Z与EST和其他不匹配。

如果您的计算机(可能)使用POSIX时间戳,并且您确定输入日期在系统可接受的范围内(距离将来/过去不太远),并且不需要保留微秒的精度,则可以用途datetime.utcfromtimestamp

from datetime import datetime
from email.utils import parsedate_tz, mktime_tz

timestamp = mktime_tz(parsedate_tz("Thu, 16 Oct 2014 01:16:17 EDT"))
# -> 1413436577
utc_dt = datetime.utcfromtimestamp(timestamp)
# -> datetime.datetime(2014, 10, 16, 5, 16, 17)


 类似资料:
  • 问题内容: 我在mysql中使用NOW()获取当前日期和时间。我想将日期值转换为varchar并将其与另一个字符串连接。我该怎么做? 问题答案: 使用DATE_FORMAT()

  • 问题内容: 例如字符串: 我将把它们推回到数据库中正确的日期时间字段中,因此我需要将它们魔术化为实际的日期时间对象。 这是通过Django的ORM进行的,因此我无法使用SQL进行插入时的转换。 问题答案: 是将字符串解析为日期时间的主要例程。它可以处理各种格式,格式由你为其指定的格式字符串确定: 生成的对象是时区未使用的。 链接: 适用于strptime:Python 2和Python 3的 Py

  • 问题内容: 将日期转换为JSON时,javascript会以以下格式保存日期: 但是,我不确定如何将其放入python datetime对象。我已经尝试过这些: 我相信javascript会将字符串保存为官方ISO格式,因此似乎应该有一种方法可以让python 读取它? 问题答案: 请尝试以下格式: 例如: 该的日期只是手段,它应该被解释为UTC时间,所以忽略它不会造成任何信息丢失。您可以在这里找

  • 问题内容: 我正在获取格式为“ 2009-05-28T16:15:00”的日期时间字符串(我相信这是ISO 8601)。一种可能的选择似乎是使用time.strptime元组的前六个元素并将其传递到datetime构造函数中来解析字符串,例如: 我还没有找到一种“清洁”的方法。有一个吗? 问题答案: 我更喜欢使用dateutil库进行时区处理和一般的可靠日期解析。如果要获得类似ISO 8601的字

  • 我有以下字符串: 我尝试用以下代码将此字符串转换为: Java . time . format . datetimeparseexception:无法解析文本“18/07/2019 04:30:00”:无法从TemporalAccessor获取LocalDateTime 我错过了什么?

  • 问题内容: 我从来没有不得不将时间与UTC转换。最近有人要求我的应用注意时区,并且我一直在圈子里奔波。我发现很多有关将本地时间转换为UTC的信息,这很基本(也许我也做错了),但是我找不到任何有关将UTC时间轻松转换为最终用户时区的信息。 简而言之,android应用程序向我发送了(appengine应用程序)数据,该数据中包含时间戳。要将时间戳存储为UTC时间,我正在使用: 那似乎行得通。当我的应