在python中概括时间戳格式

问题描述

我得到两种时间戳(一种是毫秒,另一种没有毫秒)

'endtime': '2020-09-09T05:46:41.620Z'

'starttime': '2020-09-08T18:20:57Z'

我必须指定将其转换为日期时间的格式

timestampstart = pd.to_datetime(starttime,format="%Y-%m-%dT%H:%M:%s%fZ")

是否可以在这一行中归纳“格式”,因为如果我的时间为毫秒,代码将崩溃。

如何将其重写为始终忽略毫秒而又不会使我的代码崩溃?

解决方法

两种格式均符合ISO8601。将'Z'字符(表示UTC)替换为'+00:00'(也称为UTC)后,可以方便地使用datetime.fromisoformat解析时间戳。您也可以here找到此方法。

from datetime import datetime

endtime = '2020-09-09T05:46:41.620Z'
starttime = '2020-09-08T18:20:57Z'

for t in (endtime,starttime):
    print(repr(datetime.fromisoformat(t.replace('Z','+00:00'))))
    
# datetime.datetime(2020,9,5,46,41,620000,tzinfo=datetime.timezone.utc)
# datetime.datetime(2020,8,18,20,57,tzinfo=datetime.timezone.utc)

要将所有微秒设置为零,您可以写

# setting microseconds to zero:
for t in (endtime,'+00:00')).replace(microsecond=0)))
    
# datetime.datetime(2020,tzinfo=datetime.timezone.utc)