在python中转换写入的日期到日期格式

2024-09-30 05:30:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是python2.7。在

我有一个adobepdf表单文档,它有一个日期字段。我使用pdfminer函数提取值。我需要解决的问题是,adobeacrobatreader中的用户可以键入april 3rd 2017或{}或{}或{}以及4 3 2017等字符串。现在,Adobe中的日期字段被设置为mm/dd/yyyy格式,因此当用户输入上述值之一时,即pdfminer拉取的实际值,而Adobe将其显示为04/03/2017,但当您单击该字段时,会显示与上述值类似的实际值。Adobe允许这样做,然后在转换时执行,我想将日期显示为mm/dd/yyyy。在adobe中可以使用javascript来获得更多的控制,但是我不能这样做,用户只能拥有和使用没有任何附带javascript文件的pdf表单。在

所以我想在Python中找到一个带有datetime的方法,它能够从一个字符串中接受上面的示例这样的书面日期,然后将它们转换成真正的mm/dd/yyyy格式???我看到了转换长月份和短月份名称的方法,但是没有任何方法可以处理日期名称,比如1号、2号、3号、4号。在


Tags: 方法字符串用户文档名称表单格式javascript
3条回答

只需编写一个正则表达式来从字符串中获取数字。在

import re

s = '30Apr' 
n = s[:re.match(r'[0-9]+', s).span()[1]]
print(n) # Will print 30

其他的事情应该很简单。在

你可以依次尝试每种可能的格式。首先删除任何stndrd说明符,使测试更容易:

from datetime import datetime

formats = ["%B %d %Y", "%d %B %Y", "%b %d %Y", "%m/%d/%Y", "%m %d %Y"]
dates = ["april 3rd 2017", "3rd April 2017", "Apr 3rd 2017", "04/04/2017", "4 3 2017"]

for date in dates:
    date = date.lower().replace("rd", "").replace("nd", "").replace("st", "")

    for format in formats:
        try:
            print datetime.strptime(date, format).strftime("%m/%d/%Y")
        except ValueError:
            pass

它将显示:

^{pr2}$

这种方法的好处是验证每个日期。例如一个月大于12。您可以标记任何不符合所有允许格式的日期。在

基于@MartinEvans的anwser,但是使用^{}库:(因为它处理的案例比datetime多,所以您不必使用replace()或{})

第一次安装箭头:

pip install arrow

然后尝试每种可能的格式:

^{pr2}$

将输出:

04/03/2017
04/03/2017
04/03/2017
04/04/2017
04/03/2017

如果您不确定日期格式中的错误,如果没有日期与格式匹配,也可以输出一条不错的错误消息:

def convert_datetime(date):
    for format in formats:
        try:
            print arrow.get(date, format).format('MM/DD/YYYY')
            break
        except (arrow.parser.ParserError, ValueError) as e:
            pass
    else:
        print 'For date: "{0}", {1}'.format(date, e)

convert_datetime('124 5 2017') # test invalid date

将输出以下错误消息:

'For date: "124 5 2017", month must be in 1..12'

相关问题 更多 >

    热门问题