如何将字符串 '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' 转换为日期时间对象?的主要内容,如果未能解决你的问题,请参考以下文章
如何将日期时间字符串上传到“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 日”