Python中的ISO时间(ISO 8601)

2024-04-24 00:43:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个文件。在Python中,我想占用它的创建时间,并将其转换为一个ISO time (ISO 8601) string,同时保留它是在Eastern Time Zone(ET)中创建的这一事实。

如何获取文件的ctime并将其转换为表示东部时区的ISO时间字符串(如有必要,还要考虑夏令时)?


Tags: 文件字符串zonestringtime时间isoet
3条回答

下面是我用来转换为XSD datetime格式的内容:

from datetime import datetime
datetime.now().replace(microsecond=0).isoformat()
# You get your ISO string

我在寻找XSD日期时间格式(xs:dateTime)时遇到了这个问题。我需要从isoformat中删除微秒。

ISO 8601时间表示法

国际标准ISO 8601描述了日期和时间的字符串表示。这种格式的两个简单示例是

2010-12-16 17:22:15
20101216T172215

(两者都代表2010年12月16日),但格式也允许亚秒分辨率时间和指定时区。这种格式当然不是特定于Python的,但它适合以可移植的格式存储日期和时间。有关此格式的详细信息可以在Markus Kuhn entry中找到。

我建议使用此格式将时间存储在文件中。

获取此表示中当前时间的一种方法是使用Python标准库中时间模块中的strftime:

>>> from time import strftime
>>> strftime("%Y-%m-%d %H:%M:%S")
'2010-03-03 21:16:45'

您可以使用datetime类的strTime构造函数:

>>> from datetime import datetime
>>> datetime.strptime("2010-06-04 21:08:12", "%Y-%m-%d %H:%M:%S")
datetime.datetime(2010, 6, 4, 21, 8, 12)

最强大的是Egenix mxDateTime模块:

>>> from mx.DateTime.ISO import ParseDateTimeUTC
>>> from datetime import datetime
>>> x = ParseDateTimeUTC("2010-06-04 21:08:12")
>>> datetime.fromtimestamp(x)
datetime.datetime(2010, 3, 6, 21, 8, 12)

参考资料

符合ISO 8601:

import datetime
datetime.datetime.now().isoformat()

UTC到ISO 8601:

import datetime
datetime.datetime.utcnow().isoformat()

本地到ISO 8601,无微秒:

import datetime
datetime.datetime.now().replace(microsecond=0).isoformat()

UTC到ISO 8601,带时区信息(Python 3):

import datetime
datetime.datetime.utcnow().replace(tzinfo=datetime.timezone.utc).isoformat()

UTC到ISO 8601,本地时区信息不带微秒(Python 3):

import datetime
datetime.datetime.utcnow().replace(tzinfo=datetime.timezone.utc).astimezone().replace(microsecond=0).isoformat()

本地到ISO 8601,带时区信息(Python 3):

import datetime, time

# Calculate the offset taking into account daylight saving time
utc_offset_sec = time.altzone if time.localtime().tm_isdst else time.timezone
utc_offset = datetime.timedelta(seconds=-utc_offset_sec)
datetime.datetime.now().replace(tzinfo=datetime.timezone(offset=utc_offset)).isoformat()

对于Python 2,请参见并使用pytz

相关问题 更多 >