我有一个档案。在Python中,我希望将其创建时间转换为ISO时间(ISO 8601)字符串,同时保留它是在东部时区(ET)创建的事实。

如何获取文件的ctime并将其转换为指示东部时区的ISO时间字符串(并在必要时考虑日光节约时间)?


当前回答

ISO 8601时间表示

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

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

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

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

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

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

你可以使用datetime类的strptime构造函数:

>>> 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)

参考文献

Python时间模块文档 Python datetime类文档 Egenix mxDateTime类

其他回答

如果我错了请纠正我(我没有),但是与UTC的偏移量随着夏令时的变化而变化。所以你应该使用

tz = str.format('{0:+06.2f}', float(time.altzone) / 3600)

我也相信星座应该有所不同:

tz = str.format('{0:+06.2f}', -float(time.altzone) / 3600)

我可能是错的,但我不这么认为。

ISO 8601时间表示

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

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

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

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

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

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

你可以使用datetime类的strptime构造函数:

>>> 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)

参考文献

Python时间模块文档 Python datetime类文档 Egenix mxDateTime类

请让生活变得简单:

使用UTC时间 微秒 一行代码

f utcnow () {datetime。datetime。isoformat (): 3]) Z”

输出:

2022 - 02 - 25 - t02:08:40.684z

对于那些正在寻找仅限约会的解决方案的人来说,它是:

import datetime

datetime.date.today().isoformat()
import datetime, time    
def convert_enddate_to_seconds(self, ts):
    """Takes ISO 8601 format(string) and converts into epoch time."""
     dt = datetime.datetime.strptime(ts[:-7],'%Y-%m-%dT%H:%M:%S.%f')+\
                datetime.timedelta(hours=int(ts[-5:-3]),
                minutes=int(ts[-2:]))*int(ts[-6:-5]+'1')
    seconds = time.mktime(dt.timetuple()) + dt.microsecond/1000000.0
    return seconds 

>>> import datetime, time
>>> ts = '2012-09-30T15:31:50.262-08:00'
>>> dt = datetime.datetime.strptime(ts[:-7],'%Y-%m-%dT%H:%M:%S.%f')+ datetime.timedelta(hours=int(ts[-5:-3]), minutes=int(ts[-2:]))*int(ts[-6:-5]+'1')
>>> seconds = time.mktime(dt.timetuple()) + dt.microsecond/1000000.0
>>> seconds
1348990310.26