我想将日期从一种格式转换为另一种格式。比方说,我有一些日期:
February 27, 1820
April 3, 1885
我想转换它:
27 February 1820
3 April 1885
我尝试过但收到错误:
dt = "February 12, 1809"
dt = datetime.strptime('%d %b %Y')
任何形式的帮助将不胜感激。
答案 0 :(得分:2)
time.strftime
和datetime.datetime.strftime
也不接受1900年以下的年份值。因此看起来re
有工作(尽管使用它是一种不好的风格)任务):
>>> import re
>>> s = 'February 27, 1820'
>>> month, day, year = re.findall('(\w+) (\d+), (\d+)', s)[0]
>>> '%s %s %s' % (day, month, year)
'27 February 1820'
答案 1 :(得分:1)
使用datetime.datetime.strptime或parsedatetime或dateutil来解析您的字符串。
然后使用datetime.datetime.strftime将日期时间对象格式化为使用所需格式的字符串。
答案 2 :(得分:1)
from datetime import datetime
date = datetime.strptime('February 27, 1820', '%B %d, %Y')
new_date = date.strftime('%d %b %Y')
然而,有一个问题。 strftime
似乎有多年的问题< 1900在一些平台上。它也有一个workaround。
答案 3 :(得分:1)
昨天,我从Kirk Strauser那里了解到 strptime())比其他解决方案慢得多:见this file
所以我的建议是用另一种方式。例如:
import re
ss = '''February 27, 1820
a line
April 3, 1885'''
regx = re.compile('(January|February|March|'
'April|May|June'
'July|August|September|'
'October|November|December)'
' '
'(\d|[012]\d|3[01])'
',(?= \d{4})')
print regx.findall(ss)
print
print regx.sub('\\2 \\1',ss)
使用 regx.sub(repl,ss)可以提高程序的速度, repl()是一个不提取月份和日期的函数作为组(1)和组(2),但通过切片:
import re
from time import clock
ss = '''February 27, 1820
a line
April 3, 1885'''
regx = re.compile('(January|February|March|'
'April|May|June'
'July|August|September|'
'October|November|December)'
' '
'(\d|[012]\d|3[01])'
',(?= \d{4})')
print regx.findall(ss)
print
te = clock()
for i in xrange(10000):
x = regx.sub('\\2 \\1',ss)
print clock()-te
print x
print
regx = re.compile('(?:January|February|March|'
'April|May|June'
'July|August|September|'
'October|November|December)'
' '
'(?:\d|[012]\d|3[01]),'
'(?= \d{4})')
def repl(mat):
sp = mat.group().split()
return sp[1][0:-1] + ' ' + sp[0]
te = clock()
for i in xrange(1):
y = regx.sub(repl,ss)
print clock()-te
print y
结果
[('February', '27'), ('April', '3')]
2.52965614345
27 February 1820
a line
3 April 1885
0.378833622709
27 February 1820
a line
3 April 1885
PS:我也知道strftime和strptime(不是在1900年之前)存在时间跨度的问题,这就是为什么我立即选择用正则表达式处理问题的原因。人们发现正则表达式太沉重而且令人印象深刻,但我不了解这种趋势,因为只要掌握一点正则表达式,你就可以用效率和速度做很多事情。 Hura是正则表达式工具。