convert d-m-Y in python



我想将日期从一种格式转换为另一种格式。比如说,我有一个日期:

February 27, 1820
April 3, 1885

我想把它转换成

27 February 1820
3 April 1885

I try but get error:

dt = "February 12, 1809" 
dt = datetime.strptime('%d %b %Y') 

任何形式的帮助都将非常感激。

time.strftimedatetime.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'

昨天,我从Kirk Strauser那里了解到strptime())比其他解决方案慢得多:参见此文件

所以我的建议是用另一种方式。例:

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)

编辑1

程序的速度可以使用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年之前),这就是为什么我立即选择用正则表达式来处理这个问题。人们发现正则表达式太重,太令人印象深刻,以至于无法使用它们,但我不理解这种趋势,因为只要你掌握了一点正则表达式,你就可以以高效率和速度做很多事情。

使用datetime.datetime。或parsedatetime或dateutil将字符串解析为日期。

然后使用datetime.datetime.strftime将datetime对象格式化为使用所需格式的字符串

您可以使用strptime/strftime:

from datetime import datetime
date = datetime.strptime('February 27, 1820', '%B %d, %Y')
new_date = date.strftime('%d %b %Y')

然而,有一个问题。strftime似乎有年岁问题<在一些平台上是1900。这里也有一个解决方法>

相关内容

  • 没有找到相关文章

最新更新