【问题标题】: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

【问题讨论】:

标签: python pandas datetime


【解决方案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]
猜你喜欢
  • 2017-05-24
  • 2021-03-30
  • 2017-05-28
  • 1970-01-01
  • 2020-11-19
  • 2020-03-04
  • 1970-01-01
  • 2020-08-04
  • 1970-01-01
相关资源
最近更新 更多