我正在使用Python,并且想从以下格式转换日期:
'30th Sep 2018'
或'Mon 30th Sep 2018'
更改为以下格式:
'2018-09-30 00:00:00'
我已经尝试过使用strptime()和strftime()函数,但是我无法使其与它们一起使用。
有人知道如何在Python中完成此操作吗?
答案 0 :(得分:2)
从30th Sep 2018
或Mon 30th Sep 2018
转换为2018-09-30 00:00:00
的最简单方法是使用dateutil.parser
,即:
from dateutil.parser import parse
d = "30th Sep 2018"
dd = "Mon 30th Sep 2018"
print parse(d)
print parse(dd)
# 2018-09-30 00:00:00
# 2018-09-30 00:00:00
对于相反的转换,有datetime.strptime
,但恐怕它并不会按照您的要求输出序数(第一,第二),但是,您仍然可以使用small function来获得所需的结果,即:
def ord(n):
return str(n)+("th" if 4<=n%100<=20 else {1:"st",2:"nd",3:"rd"}.get(n%10, "th"))
x = datetime.datetime.strptime("2018-09-30 00:00:00", '%Y-%m-%d %H:%M:%S')
print "{} {}".format(ord(int(x.strftime('%d'))), x.strftime('%b %Y'))
# 30th Sep 2018
答案 1 :(得分:1)
您可以这样使用datetime.strptime
和datetime.strftime
:
from datetime import datetime
def convert1(string):
conversion = '%d' + string[2:4] + ' %b %Y'
dt = datetime.strptime(string, conversion)
return dt.strftime('%Y-%m-%d %H:%M:%S')
def convert2(string):
conversion = '%a %d' + string[6:8] + ' %b %Y'
dt = datetime.strptime(string, conversion)
return dt.strftime('%Y-%m-%d %H:%M:%S')
print(convert1('30th Sep 2018'))
print(convert2('Mon 30th Sep 2018'))
print(convert1('01st Sep 2018'))
print(convert2('Sun 02nd Sep 2018'))
这是输出:
2018-09-30 00:00:00
2018-09-30 00:00:00
2018-09-01 00:00:00
2018-09-02 00:00:00
我使用了in the documentation for datetime中所述的模式。我用sclicing提取了日期字符串的th
部分。为此,我确保这些功能也可用于nd
和st
。
答案 2 :(得分:0)