1

该程序旨在要求日期为 dd/mm/yyyy。然后它应该检查用户是否以正确的格式 (dd/mm/yyyy) 输入了日期。我的程序无法正确识别格式。这是我的程序:

date = (input("enter the date as dd/mm/yyyy: "))
date = day, month, year = date.split("/")
if date == (day + '/' + month + '/' + year):
    print (date)
    if len(day) == 1 or len(day) == 2:
        print("1")
    if len(month) == 1 or len(month) == 2:
        print("2")
    if len(year) == 4:
        print ("3")
else:
    if len(day) == 1 or len(day) == 2:
        print("4")
    if len(month) == 1 or len(month) == 2:
        print("5")
    if len(year) == 4:
        print ("6")        

目前打印的数字除了检查日期的有效性之外没有其他目的。到目前为止,只打印了 4,5 和 6,这意味着我的程序无法识别日期的格式。

4

2 回答 2

5

您的解决方案不起作用,因为date=day, month, year = date.split("/")设置date为 a list,然后您将其与string( day + '/' + month + '/' + year) 进行比较。但是,您的解决方案是已解决的问题,请改为:

import datetime
date = (input("enter the date as dd/mm/yyyy: "))

try: datetime.datetime.strptime(date,"%d/%m/%Y")
except ValueError: # incorrect format

此外,您可能稍后会将其变成一个datetime对象,因此您可以在try块中这样做!

作为进一步的优化,请注意许多用户不希望使用日期间隔来输入他们的日期/!对您的输入进行一些内省,并适当地调整您的日期间隔。

date = input("enter the date: ")

if "-" in date: datesep = "-"
elif "/" in date: datesep = "/"
elif "." in date: datesep = "."
else: datesep = ""

if len(date) < 6: yeartype = "%y"
elif date[-4:-2] not in ("19","20"): yeartype = "%y"
else: yeartype = "%Y"

try: date = datetime.datetime.strptime(date,"%d{0}%m{0}{1}".format(datesep,yeartype))
except ValueError: # invalid date

现在您的代码将以datetime2014 年 2 月 2 日的有效对象结束:

  • 02022014
  • 222014
  • 0222014
  • 222014
  • 020214
  • 02214
  • 2214
  • 02-02-2014
  • 2014 年 2 月 2 日
  • 2-2-14
  • 2014 年 2 月 2 日
  • 2/2/14
  • 等等等等
于 2014-02-14T23:19:00.467 回答
2

您可以使用该datetime模块:

import datetime

def checkdate(date):

    try:
        datelist = date.split('/')
        datetime.datetime(year=int(datelist[2]), month=int(datelist[1]),day=int(datelist[0]))
        return True
    except:
        return False
于 2014-02-14T23:19:32.017 回答