代码_日期的验证

【需求描述】: 在手机的系统设置中,系统日期的有效范围为1971年1月1日到2035年12月31日

【实现功能】: 输入三个数,分别表示年、月、日,判断是否为一个合法的日期输入,且日期有效范围为1971年1月1日到2035年12月31日

【开发设计】: 略

【代码及测试数据】:

# -*- coding: utf-8 -*-

import sys
reload(sys)
sys.setdefaultencoding('utf-8')


#输入三个数,分别表示年月 日,判断是否为一个合法日期输入
def judge_date(y, m, d):
    #判断年份、月份、日期是否为整数
    try:
        year = int(y)
        month = int(m)
        day = int(d)
    except ValueError,e:
        return [1, "年或月或日只能为整数"]

    #判断年份的范围
    if year < 1971 or year > 2099:
        return [1,"年份的范围只能是【1971, 2099】"]

    months=[31,28,31,30,31,30,31,31,30,31,30,31]

    #闰年的话2月最多29天
    if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):
        months[1]=29

    if month < 1 or month > 12:
        return [1, "月份只能为【1, 12】, 而实际输入的为%d" % month]
    elif day < 1 or day > months[month - 1]:
        return [1, "%d月份只能为【1, %d】, 而实际输入的为%d" % \
                (month, months[month - 1], day)]
    else:
        return [0, "%d-%d-%d" % (year, month, day)]


#测试数据
#有效测试数据
valid_params = {
    "param_01": ["1971", "1", "1"],
    "param_02": ["2035", "12", "31"],
    "param_03": ["1980", "2", "29"],
    "param_04": ["1994", "3", "31"],
    "param_05": ["1999", "2", "28"],
    "param_06": ["2000", "4", "30"],
    "param_07": ["2010", "5", "31"],
    "param_08": ["2028", "6", "30"],
    "param_09": ["2030", "7", "31"],
    "param_10": ["2035", "8", "31"],
    "param_11": ["2035", "9", "30"],
    "param_12": ["2020", "10", "31"],
    "param_13": ["2000", "11", "30"]
}

#无法测试数据
invalid_params = {
    "param_01": ["1972", "01", "32"],
    "param_02": ["1972", "02", "0"],
    "param_03": ["1985", "07", "a"],
    "param_04": ["1999", "04", ""],
    "param_05": ["1999", "00", "20"],
    "param_06": ["2000", "13", "18"],
    "param_07": ["2012", "B", "31"],
    "param_08": ["2030", "+", "10"],
    "param_09": ["0000", "12", "18"],
    "param_10": ["4038", "11", "38"],
    "param_11": ["20+)", "13", "20"],
    "param_12": ["++++", "-*", "%%"]
}


#验证过程
print "-------------有效值的测试-----------"
for valid_value in valid_params.values():
    #print valid_value
    result = judge_date(valid_value[0], valid_value[1], valid_value[2])
    if result[0] == 0:
        print "【Pass】, 输入的年:%s, 月:%s ,日: %s, 输出: %s" % \
              (valid_value[0],valid_value[1], valid_value[2], result[1])
    else:
        print "【Fail】, 输入的年:%s, 月:%s ,日: %s, 输出: %s" %\
              (valid_value[0],valid_value[1], valid_value[2], result[1])

print "\n-------------无效值的测试----------"
for invalid_value in invalid_params.values():
    #print invalid_value
    result = judge_date(invalid_value[0], invalid_value[1], invalid_value[2])
    if result[0] == 1:
        print "【Pass】, 输入的年:%s, 月:%s ,日: %s, 错误信息: %s" %\
              (invalid_value[0],invalid_value[1], invalid_value[2], result[1])
    else:
        print "【Fail】, 输入的年:%s, 月:%s ,日: %s, 错误信息: %s" %\
              (invalid_value[0],invalid_value[1], invalid_value[2], result[1])

【运行结果】:

 

posted @ 2017-02-17 12:00  坏脾气  阅读(768)  评论(0编辑  收藏  举报