关于日期时间:如何在python中将日期字符串(2016/5/7/4:25:00 pm)转换为日期格式(2016-05-07 4:25:00)

how to convert date string(2016/5/7/ 4:25:00 PM) to date format to (2016-05-07 4:25:00) in python

本问题已经有最佳答案,请猛点这里访问。

无法将此字符串转换为日期时间,这是迄今为止我在代码中尝试的方法:

1
2
3
4
5
import datetime

mystring = '2016/5/7/  4:25:00 PM'
dateobj = datetime.datetime.strptime(mystring,"%Y-%B-%dT%H:%M:%S-%H:%M")
print (dateobj)

它会给我带来错误,我在库中搜索,但仍然无法找出我的格式中有什么错误。请帮忙,我会免费的


你可以这样做:

1
2
3
4
5
6
7
8
9
10
11
12
13
import datetime    
mystring = '2016/5/7 4:25:00 PM'


dateobj = datetime.datetime.strptime(mystring,"%Y/%m/%d %I:%M:%S %p")

dateobj
Out[1]: datetime.datetime(2016, 5, 7, 16, 25)

dateobj1 = datetime.datetime.strptime(mystring,"%Y/%m/%d %I:%M:%S %p").strftime("%Y-%m-%d %I:%M:%S")

dateobj1
Out[2]: '2016-05-07 04:25:00'

使用dateutil.parser.parse很容易

1
2
3
4
5
6
>>> from dateutil.parser import parse
>>> d = parse('2016/5/7/  4:25:00 PM')
>>> d.strftime("%Y-%B-%dT%H:%M:%S-%H:%M")
'2016-May-07T16:25:00-16:25'
>>> d.strftime("%Y-%m-%d %I:%M:%S")
'2016-05-07 04:25:00'


我不确定您的格式字符串来自何处,但它是错误的。它根本不符合您的字符串格式。

查看文档中的可用选项。

你想要这个:

1
dateobj = datetime.datetime.strptime(mystring,"%Y/%m/%d/ %I:%M:%S %p")

这会给你一个约会对象。然后您可以这样做来重新格式化它:

1
dateobj.strftime("%Y-%m-%d %I:%M:%S")

你的几个问题:

  • 你用了两次%H。这导致了一个错误,说它将被重新定义。
  • %B是全名(即一月)。你有一个数字。
  • -是不正确的,因为您有/s。
  • T根本不在你的字符串中。

您面临的问题是,为了转换日期对象,必须首先创建日期对象。这意味着您的格式必须与当前字符串格式'2016/5/7 4:25:00 PM' ="%Y/%m/%d %H:%M:%S %p"匹配。所以我们现在可以创建一个日期对象,然后使用strftime和新格式"%Y-%B-%dT%H:%M:%S-%H:%M"对其进行格式化。

1
2
3
4
5
6
import datetime

mystring = '2016/5/7 4:25:00 PM'
dateobj = datetime.datetime.strptime(mystring,"%Y/%m/%d %H:%M:%S %p")
dateobj = datetime.datetime.strftime(dateobj,"%Y-%B-%dT%H:%M:%S-%H:%M")
print (dateobj)

收到的输出有点奇怪,但它完全符合您的格式。访问日期时间库以查看格式代码,并阅读strptimestrftime的内容。祝你好运。

Output: 2016-May-07T04:25:00-04:25