检查字符串的格式/内容

时间:2014-02-14 23:13:30

标签: python date python-3.x python-datetime

此程序旨在要求日期为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,这意味着我的程序无法识别日期的格式。

2 个答案:

答案 0 :(得分:5)

您的解决方案无效,因为date=day, month, year = date.split("/")date设置为list,然后您将其与string({{1}进行比较}})。但是,您的解决方案是一个已解决的问题,请改为:

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作为日期信息输入日期!对输入进行一些自省,并适当调整日期搜索。

/

现在,您的代码将以2014年2月2日的有效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 对象结束:

  • 02022014
  • 222014
  • 0222014
  • 222014
  • 020214
  • 02214
  • 2214
  • 2014年2月2日
  • 2014年2月2日
  • 2-2-14
  • 2014年2月2日
  • 14年2月2日
  • 等等等

答案 1 :(得分: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