29

这些日期时间格式是什么?我需要将它们转换为相同的格式,以检查它们是否相同。这些只是两个来自单独的数据源,所以我需要找到一种方法使它们具有相同的格式。有任何想法吗?

  • 2013-07-12T07:00:00Z

  • 2013-07-10T11:00:00.000Z

提前致谢

4

5 回答 5

56

额外.000的时间是微秒。

这会将格式的日期字符串转换为日期时间对象。

import datetime
d1 = datetime.datetime.strptime("2013-07-12T07:00:00Z","%Y-%m-%dT%H:%M:%SZ")
d2 = datetime.datetime.strptime("2013-07-10T11:00:00.000Z","%Y-%m-%dT%H:%M:%S.%fZ")

然后根据您的要求将它们转换为任何格式,方法是使用:

new_format = "%Y-%m-%d"
d1.strftime(new_format)
于 2013-07-11T13:23:02.703 回答
8

也许使用.isoformat()

ISO 8601 格式的字符串,YYYY-MM-DDTHH:MM:SS[.mmmmmm][+HH:MM]

>>> import datetime
>>> datetime.datetime.utcnow().isoformat() + "Z"
'2013-07-11T22:26:51.564000Z'
>>>

Z指定“zulu”时间或 UTC。

您还可以通过应用适当的tzinfo对象使您的 datetime 对象时区感知来添加时区组件。应用tzinfo后,该方法将在输出中包含适当的 utc 偏移量:.isoformat()

>>> d = datetime.datetime.utcnow().replace(tzinfo=datetime.timezone.utc)
>>> d.isoformat()
'2019-11-11T00:52:43.349356+00:00'

您可以通过将微秒值更改为来删除微秒0

>>> no_ms = d.replace(microsecond=0)
>>> no_ms.isoformat()
'2019-11-11T00:52:43+00:00'

此外,从python 3.7开始,该.fromisoformat()方法可用于将 iso 格式的日期时间字符串加载到 python 日期时间对象中:

>>> datetime.datetime.fromisoformat('2019-11-11T00:52:43+00:00')
datetime.datetime(2019, 11, 11, 0, 52, 43, tzinfo=datetime.timezone.utc)

http://www.ietf.org/rfc/rfc3339.txt

于 2013-07-11T13:28:39.100 回答
3

你可以尝试修剪字符串

data = "2019-10-22T00:00:00.000-05:00"
result1 = datetime.datetime.strptime(data[0:19],"%Y-%m-%dT%H:%M:%S")
result2 = datetime.datetime.strptime(data[0:23],"%Y-%m-%dT%H:%M:%S.%f")
result3 = datetime.datetime.strptime(data[0:9], "%Y-%m-%d")
于 2019-10-22T14:30:16.070 回答
3

使用日期时间模块。

对于一个变量

import datetime
def convertDate(d):
     new_date = datetime.datetime.strptime(d,"%Y-%m-%dT%H:%M:%S.%fZ")
     return new_date.date()
convertDate("2019-12-23T00:00:00.000Z")

您可以将“.date()”更改为“.year”、“.month”、“.day”等...

输出:# 现在是一个日期时间对象

datetime.date(2019, 12, 23)

对于 DataFrame 列,使用 apply()

df['new_column'] = df['date_column'].apply(convertDate)

于 2020-05-12T05:03:26.907 回答
0

* 简短且最佳的方式:

str(datetime.datetime.now()).replace(' ','T')
or
str(datetime.datetime.now()).replace(' ','T') + "Z"
于 2020-01-10T13:21:32.600 回答