如何在Python中将YYYY-MM-DDTHH:mm:ss.000Z时间格式转换为MM / DD / YYYY时间格式?

51
例如,我试图将 2008-09-26T01:51:42.000Z 转换为 09/26/2008。最简单的方法是什么?
5个回答

58

最简单的方法是使用dateutil.parser.parse()将日期字符串解析为带有时区信息的datetime对象,然后使用strftime()获取所需格式。

import dateutil.parser

d = dateutil.parser.parse('2008-09-26T01:51:42.000Z')
print(d.strftime('%m/%d/%Y'))  #==> '09/26/2008'

为什么要 import datetime?你好像没有使用它。 - jhrr
@jhrr dateutil.parser.parse 将字符串对象转换为日期时间对象。该 datetime 库用于处理此对象的日期时间字符串转换,即 d.strftime - addicted

50

我知道这是一个很老的问题,但你可以使用Python datetime.strptime()函数来完成它。

>>> from datetime import datetime
>>> date_format = "%Y-%m-%dT%H:%M:%S.%fZ" 
>>> datetime.strptime('2008-09-26T01:51:42.000Z', date_format)
datetime.datetime(2008, 9, 26, 1, 51, 42)

1
感谢提供格式字符串。对于strptime和strftime都非常有用! - Martin Burch
一个更短的格式是使用指令:"%Y-%m-%dT%X.%fZ" :-) - Mangohero1

24
>>> import time
>>> timestamp = "2008-09-26T01:51:42.000Z"
>>> ts = time.strptime(timestamp[:19], "%Y-%m-%dT%H:%M:%S")
>>> time.strftime("%m/%d/%Y", ts)
'09/26/2008'

请查看Python time模块的文档以获取更多信息。


我知道在这种情况下它们当然是不相关的,但除了去掉它们,有没有一种处理毫秒的方法? - Vinko Vrsalovic
不幸的是,strptime函数似乎没有毫秒的转换运算符。 - Greg Hewgill
虽然答案看起来相当完整,但如果您想在Python日期/时间主题上阅读更多内容,我建议访问此页面http://pleac.sourceforge.net/pleac_python/datesandtimes.html - Seldaek
1
虽然这个解决方案可以得到所需的结果,但它没有考虑时区(在这种情况下是UTC),这在某些情况下可能是不可取的。 - Jeremy Cantrell
Jeremy:OP 没有询问任何关于本地时间转换的问题。上面的解决方案在不考虑时区的情况下操作时间戳的组件。 - Greg Hewgill
看起来Python3确实处理微秒,详见datetime文档。我正在使用strptime解析这个精确格式,格式为%Y-%m-%dT%H:%M:%S.%fZ - Jon Surrell

3

2008-09-26T01:51:42.000Z是ISO8601日期格式,其格式非常多样化。如果您想解析这些日期,请参阅Python Wiki上的时间处理页面。该页面包含一些有用的模块链接。


-3
def datechange(datestr):
dateobj=datestr.split('-')
y=dateobj[0]
m=dateobj[1]
d=dateobj[2]
datestr=d +'-'+ m +'-'+y
return datestr

你可以编写一个函数,接收日期对象并返回所需的日期格式。

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