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

Python strptime()和时区?

容鸿畴
2023-03-14
问题内容

我有一个使用IPDDump创建的Blackberry IPD备份中的CSV转储文件。这里的日期/时间字符串看起来像这样(EST澳大利亚时区):

Tue Jun 22 07:46:22 EST 2010

我需要能够在Python中解析此日期。首先,我尝试strptime()从datettime开始使用该功能。

>>> datetime.datetime.strptime('Tue Jun 22 12:10:20 2010 EST', '%a %b %d %H:%M:%S %Y %Z')

但是,由于某种原因,返回的datetime对象似乎没有任何tzinfo关联。

我确实在该页面上阅读了显然是datetime.strptime默默丢弃的内容tzinfo,但是,我检查了文档,但找不到此处记录的任何效果。

我已经能够使用第三方Pythondateutil来解析日期,但是我仍然对如何strptime()错误地使用内置函数感到好奇?有什么办法可以使strptime()时区与时俱进吗?


问题答案:

datetime模块的文件说:

返回对应于date_stringdatetime,并根据格式进行解析。等同于datetime(*(time.strptime(date_string, format)[0:6]))

看到了[0:6]吗?那让你(year, month, day, hour, minute, second)。没有其他的。没有提及时区。

有趣的是,[Win XP SP2,Python 2.6、2.7] time.strptime无法将示例传递给你,但是如果你去除了“%Z”和“ EST”,它就可以工作。也可以使用“ UTC”或“ GMT”代替“ EST”。“ PST”和“ MEZ”无效。令人费解。

值得注意的是,此版本已从3.2版开始更新,并且同一文档现在也声明以下内容:

当%z指令提供给strptime()方法时,将生成一个已知的datetime对象。结果的tzinfo将设置为时区实例。

请注意,这不适用于%Z,因此大小写很重要。请参见以下示例:

In [1]: from datetime import datetime

In [2]: start_time = datetime.strptime('2018-04-18-17-04-30-AEST','%Y-%m-%d-%H-%M-%S-%Z')

In [3]: print("TZ NAME: {tz}".format(tz=start_time.tzname()))
TZ NAME: None

In [4]: start_time = datetime.strptime('2018-04-18-17-04-30-+1000','%Y-%m-%d-%H-%M-%S-%z')

In [5]: print("TZ NAME: {tz}".format(tz=start_time.tzname()))
TZ NAME: UTC+10:00


 类似资料:
  • 我有一个使用百里香叶作为视图层的Spring Boot Web应用程序,我需要显示一些特定时区的日期(CET = UTC 1/UTC 2)。 服务器设置为UTC,所有日期都以UTC格式作为datetime存储在我的数据库中,这很好。 现在我想在我的超文本标记语言页面上显示这个日期,不是UTC格式,而是使用胸膜时序的CET,但它似乎不起作用。 date对象是一个Java Instant。 从 DB

  • 我正在开发一个带有MySQL数据库的Java应用程序,该数据库位于与我的服务器不同的时区,我正试图决定在我的数据库上使用DATETIME还是TIMESTAMP。 在阅读了诸如我应该使用字段'datetime'还是'TIMESTAMP'之类的问题,以及MySQL文档之后,我认为TIMESTAMP更适合我,因为它将值转换为UTC以存储,并返回到当前时区以进行检索。 此外,正如用户Jesper在本文中所

  • 问题内容: 我正在尝试将时区系统集成到我的应用程序中,直到现在为止,我一直在努力避免制作时区感知的应用程序- 但是它是一项强制性要求,因此别无选择。TimeZones只是在我头上。我已经在PHP.net和其他站点(包括但不限于SO)上阅读了多个主题。但是我永远也无法掌握。 因此,我想知道是否有人可以在这里帮助我:(我想要做的是在我的应用程序中使用偏好选项,以允许用户从选择菜单中选择自己的时区,但是

  • 在django文档中,它们总是可以将datetime对象存储在设置中提供的TIME_ZONE中。 我想问的是,对具有时间意识的对象进行日期标注就足够了,还是我们必须将它们转换为时区设置?例如,如果我的时区=“America/Los\u Angeles”并使用_TZ=True,并且我尝试保存一个时区感知对象,该对象位于“UTC”中,这会起作用吗?也就是说,django会在保存到db之前将“UTC”时

  • 问题内容: 我正在使用JodaTime在Java应用程序中处理时区。尝试从Java时区的ID构建DateTimeZone(JodaTime)对象时遇到问题。乔达抛出 对于以下时区列表: SystemV / HST10 SystemV / YST9 SystemV / YST9YDT SystemV / PST8 SystemV / PST8PDT SystemV / MST7 SystemV /

  • 然后将变量持久化到MySQL表列中。 然而,虽然通过调试,我看到对象显示在正确的时区GMT+1,但在数据库上持久化时,它是一个GMT时区,所以要追溯一个小时。 使用函数返回一个GMT+1日期。 连接字符串为,没有任何参数。 编辑:找到这段代码