【问题标题】:Check Date Format from a Python Tkinter entry widget从 Python Tkinter 条目小部件检查日期格式
【发布时间】:2018-07-28 14:09:00
【问题描述】:

使用 Tkinter 输入框,我要求用户输入格式为 YYYYMMDD 的日期。 我想检查日期是否以正确的格式输入,否则会出现错误框。以下函数检查整数,但在下一步需要一些帮助,即日期格式。

    def retrieve_inputBoxes():
        startdate = self.e1.get()  # gets the startdate value from input box
        enddate = self.e2.get()    # gets the enddate value from input box
        if startdate.isdigit() and enddate.isdigit():
           pass
        else:
            tkinter.messagebox.showerror('Error Message', 'Integer Please!')
            return     

【问题讨论】:

  • 我认为@John 想知道的不是如何实现验证功能,而是如何判断格式是否正确,在这种情况下,正则表达式将是明显的解决方案。谷歌“正则表达式日期格式 YYYYMMDD”。您可能希望将格式更改为 YYYY-MM-DD,因为它在现实生活中看起来更常用。
  • @figbeam:你可能是对的。我重新打开了这个问题。

标签: python-3.x tkinter


【解决方案1】:

最简单的方法可能是使用正则表达式。但是,YYYYMMDD 显然是一种不常见的格式,我发现的正则表达式很复杂。这是匹配格式 YYYY-MM-DD 的正则表达式示例:

import re

text = input('Input a date (YYYY-MM-DD): ')
pattern = r'(19|20)\d\d[- /.](0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])'
match = re.search(pattern, text)
if match:
    print(match.group())
else:
    print('Wrong format')

这个正则表达式适用于 20 世纪和 21 世纪,并且不会关心每个月有多少天,只是最大值是 31。

【讨论】:

  • 这是检查日期格式的好方法 - 然后我使用替换命令从日期中删除字符“-”,例如 startdate=text.replace('-','')
【解决方案2】:

可能您已经解决了这个问题,但如果有人遇到同样的问题,您还可以使用 strptime 方法将从条目小部件检索到的数据转换为 datetime 格式,并使用 try 语句捕获异常,例如:

from datetime import *

def retrieve_inputBoxes():
    try:
        startdate = datetime.strptime(self.e1.get(), '%Y-%m-%d')
        enddate = datetime.strptime(self.e2.get(), '%Y-%m-%d')
    except:
        print('Wrong datetime format, must be YYYY-MM-DD')
    else:
        print('startdate: {}, enddate: {}').format(startdate, enddate)

请注意,将产生的输出字符串类似于YYYY-MM-DD HH:MM:SS.ssssss,您可以将其截断如下,仅获取日期:

startdate = str(startdate)[0:10] #This truncates the string to the first 10 digits
enddate = str(enddate)[0:10] 

在我看来,这种方法比 Regex 方法更好,因为这种方法还可以检测用户是否尝试输入无效值,例如 2019-04-31,或者闰年的情况涉及(即 2019-02-29 = 无效,2020-02-29 = 有效)。

【讨论】:

    猜你喜欢
    • 2018-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-16
    • 1970-01-01
    • 2018-01-01
    • 1970-01-01
    相关资源
    最近更新 更多