Python中的日期时间格式

32

这些日期时间格式是什么?我需要将它们转换成相同的格式,以检查它们是否相同。这只是来自另一个数据源的两个时间戳,所以我需要找到一种方法使它们有相同的格式。有什么好主意吗?

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

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

先谢谢你。


可能有更优雅的解决方案,但如果它是一个字符串,只需剪切掉多余的 .000 即可。 - Tall Paul
1
http://www.ietf.org/rfc/rfc3339.txt - monkut
2
如果您发现任何答案对您有帮助并且确实解决了您的问题,请接受该答案 - Sudipta
5个回答

65

那个额外的.000是微秒。

这将把一个格式的日期字符串转换为datetime对象。

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)

1
谢谢,这真的很有帮助 - 它可行。我该如何反转它呢?这样我就可以将d1或d2转回它们原来的日期格式。提前致谢。 - user1579970
1
@user1579970 "2013-07-12T07:00:00Z" 是一个字符串,d1是一个日期时间对象。您可以使用 strftime() 将日期时间对象转换为任何格式的字符串。因此,在这种情况下,您可以执行 d1.strftime("%Y-%m-%dT%H:%M:%SZ") - Sudipta
@user1579970 如果这个答案对你有用,请接受答案并关闭问题。 - Sudipta
非常感谢您 <3 - Grace Nikole

12

或许可以使用.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对象来使其时区感知(timezone aware),从而添加时区组件。 应用了tzinfo后,.isoformat()方法将在输出中包括适当的UTC偏移量:

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

您可以通过将microseconds值更改为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


1
那么在3.7之前,我们如何解析以+00:00结尾的日期?%z会失败... - user13897170

5

你可以尝试对字符串进行修剪

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")

3

使用datetime模块。

对于一个变量

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)

使用apply()处理DataFrame列

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


0

* 简短而最佳的方式:

str(datetime.datetime.now()).replace(' ','T')
or
str(datetime.datetime.now()).replace(' ','T') + "Z"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接