Python:测试string是否等于datetime对象?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python:测试string是否等于datetime对象?相关的知识,希望对你有一定的参考价值。

我差不多完成了日期修复功能(我在Python中的第一个真正的项目!),我通过stackoverflow得到了很多很棒的帮助 - 谢谢!

我现在的问题是测试一个不符合我在程序中声明的条件的变量。这是我正在尝试做的事情:

对于我的计划中的日期,我想检查这些日期可能输入的各种方式(例如,01/01 / 1999,01-01-1999,1999年1月1日,1999年1/1月,3-9- 1999年,“无”等)。我无法工作的是输入的值是a)不是整数(即1999),b)不是datetime.date格式,或c)不是字符串'None'。在我下面的完整代码的例子中,我无法弄清楚如何让“WORDS”达到一个异常,该异常说明它不是一个有效的日期。

如果有人有时间,你能看看我的代码,看看你是否发现了明显的错误?我想我可能需要一些东西来比较变量'date'到它是否是一个datetime对象,如果是false,打印出一条消息,表明它不是一个有效的日期,但多次尝试捕获这个都是不成功。如果有人有建议或其他文章要阅读,或者他们可以找到类似的问题(我还没有找到),请告诉我。感谢您的时间!

*另外,如果编码太冗长,请原谅我;第一个计时器

import datetime
import sys
import re

debug = True
log = sys.stdout

dates = ["WORDS", "4-1-2010", "9/1/1999", "7-9-2000", "01/01/2001", "None", "14-Jun-1905", 
"09/09/2009", 2008, "06-06-2006", 1999, "05-May-2005", "12/31/2010", "09-Jul-1905", "07/09/1905", 
"07-09-1905", "1-Jul-1905", "03-Aug-1935", "3/1/1965", 1900]

def fix_date(date):
    constant = datetime.date(1899, 12, 30)
    if debug : print("Fix date:", date, file=log)
    dt = datetime.datetime.strptime(date, '%d-%b-%Y')
    year = int(dt.year)
    month = int(dt.month)
    day = int(dt.day)
    cleanDate = datetime.date(year, month, day)
    dateYear = cleanDate - constant
    x = int(dateYear.days)
    if x < 1901:
        print("ERROR: Date removed:", date, '
', file=log)
        return ""
    elif x <= datetime.datetime.now().year:
        print("Date converted:", date, ":", dateYear.days, file=log)
        print("Date OK:", dateYear.days, '
')
        return str(dateYear.days)
    else:
        newdate = datetime.datetime.strftime(cleanDate, '%Y%m%d')
        if debug : print("Date OK:", newdate, '
', file=log)
        return newdate
    print()

print('
All Date Variables:
')
count = 0

for date in dates:
    count += 1
    print(count, ': Original date:', date)
    try:
        if date != datetime.datetime.strptime(date, '%m-%d-%Y'):
            dt = datetime.datetime.strptime(date, '%m-%d-%Y')
            date = datetime.datetime.strptime(date, '%m-%d-%Y').strftime('%d-%b-%Y')
            print("DASH:", date)
            fix_date(date)
    except:
        try:
            if date != datetime.datetime.strptime(date, '%m/%d/%Y'):
                dt = datetime.datetime.strptime(date, '%m/%d/%Y')
                date = datetime.datetime.strptime(date, '%m/%d/%Y').strftime('%d-%b-%Y')
                print("SLASH:", date)
                fix_date(date)
        except:
            try:
                if date != datetime.datetime.strptime(date, '%d-%b-%Y'):
                    dt = datetime.datetime.strptime(date, '%d-%b-%Y')
                    date = datetime.datetime.strptime(date, '%d-%b-%Y').strftime('%d-%b-%Y')
                    print("MEDIUM:", date)
                    fix_date(date)
            except:
                try:
                    if date.strip() == "None":
                        print("NONE:", date)
                        print("DO NOT ENTER A DATE
")
                except:
                    try:
                        if len(str(date)) == 4:
                            print("INTEGER:", date)
                            print("Date OK:", str(date), '
')
                    except:
                        print("SOME ERROR OCCURRED")

编辑

我通过稍微改变代码并在最后一个try / except块之前在块中创建“else”语句来完成工作。通过寻找明星的踪迹更容易看到我的编辑:)

...
                try:
                    if date.strip() == "None":
                        print("NONE:", date)
                        print("DO NOT ENTER A DATE
")
                    else:
                        print("********************INVALID DATE")
...
答案

我发现了一些更好的东西。不要自己尝试所有格式,而是使用dateutil。尝试解析日期的一行代码。

你需要dateutil pip包

import dateutil
from dateutil import parser

dte = dateutil.parser.parse('03-31-1981');
dte = dateutil.parser.parse('03/31/1981');
dte = dateutil.parser.parse('1981-03-31');
dte = dateutil.parser.parse('1981-MAR-31');
print(dte)

以上是关于Python:测试string是否等于datetime对象?的主要内容,如果未能解决你的问题,请参考以下文章

使用脚本选项及组合条件测试

shell脚本编程测试类型下

linux-条件测试

编写函数,接受一个string,返回一个bool值,指出string是否有5个或者更多字符,使用此函数打印出长度大于等于5的元素

linux之条件测试

python的测试