Python-日期转换

时间:2018-09-15 16:02:02

标签: python datetime

我正在使用Python,并且想从以下格式转换日期:

'30th Sep 2018''Mon 30th Sep 2018'

更改为以下格式:

'2018-09-30 00:00:00'

我已经尝试过使用strptime()和strftime()函数,但是我无法使其与它们一起使用。

有人知道如何在Python中完成此操作吗?

3 个答案:

答案 0 :(得分:2)

30th Sep 2018Mon 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.strptimedatetime.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部分。为此,我确保这些功能也可用于ndst

答案 2 :(得分:0)

print(datetime.strftime('%Y %m %d %X)

您可以使用 strftime 更改日期和时间的样式

转到

  

http://strftime.org/

更多信息