如何将字符串 '2020-01-06T00:00:00.000Z' 转换为日期时间对象?

Posted

技术标签:

【中文标题】如何将字符串 \'2020-01-06T00:00:00.000Z\' 转换为日期时间对象?【英文标题】:How can I convert the string '2020-01-06T00:00:00.000Z' into a datetime object?如何将字符串 '2020-01-06T00:00:00.000Z' 转换为日期时间对象? 【发布时间】:2020-05-01 19:36:52 【问题描述】:

正如问题所说,我有一系列字符串,例如'2020-01-06T00:00:00.000Z'。如何使用 Python 将此系列转换为 datetime?我更喜欢熊猫的方法。如果没有,有什么方法可以解决这个任务吗?谢谢大家。

string '2020-01-06T00:00:00.000Z' 
convert to 2020-01-06 00:00:00 under datetime object

【问题讨论】:

这能回答你的问题吗? How do I parse an ISO 8601-formatted date? 一种简单的方法来处理 Z 并解析到感知日期时间/UTC:replace with +00:00. 【参考方案1】:

在 Python 3.7+ 中,这可以通过 datetime.fromisoformat() 和源字符串的一些 调整 来实现:

>>> from datetime import datetime
>>> datetime.fromisoformat('2020-01-06T00:00:00.000Z'[:-1] + '+00:00')
datetime.datetime(2020, 1, 6, 0, 0, tzinfo=datetime.timezone.utc)
>>> 

这里有一个更Pythonic的方法来达到同样的结果:

>>> from datetime import datetime
>>> from datetime import timezone
>>> datetime.fromisoformat('2020-01-06T00:00:00.000Z'[:-1]).astimezone(timezone.utc)
datetime.datetime(2020, 1, 6, 3, 0, tzinfo=datetime.timezone.utc)
>>> 

最后,要将其格式化为%Y-%m-%d %H:%M:%S,您可以这样做:

>>> d = datetime.fromisoformat('2020-01-06T00:00:00.000Z'[:-1]).astimezone(timezone.utc)
>>> d.strftime('%Y-%m-%d %H:%M:%S')
'2020-01-06 00:00:00'
>>>

【讨论】:

仅仅剥离Z 可能是个坏主意,因为这将导致一个简单的日期时间对象——Python 将其视为本地时间,而不是UTC(由Z) @MrFuppes,感谢您的提醒。我更新了解决这个问题的答案。 ... 使用您在主要 cmets 中的建议。【参考方案2】:

给定raw_time 是包含字符串时间的列。你可以这样做

pd.to_datetime(df['raw_time'])

【讨论】:

此方法将创建 2020-01-06 00:00:00+00:00。我想让日期时间在 '%Y-%m-%d %H:%M:%S' 下,没有 +00:00 那你只需要对该列使用strftime即可。【参考方案3】:

如果你想要 pandas 方法试试这个:

sample series `s`

Out[1792]:
0    2020-01-06T00:00:00.000Z
1    2020-01-06T01:00:00.000Z
dtype: object

s_time = pd.to_datetime(s).dt.tz_localize(None)

Out[1796]:
0   2020-01-06 00:00:00
1   2020-01-06 01:00:00
dtype: datetime64[ns]

【讨论】:

注:this might change more than you expect.

以上是关于如何将字符串 '2020-01-06T00:00:00.000Z' 转换为日期时间对象?的主要内容,如果未能解决你的问题,请参考以下文章

如何将字符添加到 pandas 列中的日期或 str?

如何将日期时间字符串上传到“TIME”字段 bigquery

如何实现“tzinfo”以将当前 GMT 偏移到 EST(GMT -4:00)?

如何使用 c# 将 1606813200000 转换为 2020-12-01T09:00:00.000Z [重复]

如何使用 javascript/ES6/ReactJS 将“2018-04-01T00:00:00.000Z”转换为“2018 年 4 月 1 日”

如何在javascript中更新子数组元素