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对象?的主要内容,如果未能解决你的问题,请参考以下文章
编写函数,接受一个string,返回一个bool值,指出string是否有5个或者更多字符,使用此函数打印出长度大于等于5的元素