有效日期时间python

时间:2018-08-10 06:12:38

标签: python datetime

给出一个整数输入。有什么方法可以检查日期时间是否可以使用给定的整数。我想生成所有这样的日期并返回最大的日期。我编写的代码包含太多if-else情况,并且是唯一有效的时间限制条件。

import random
sortime = []
hr1 = []
hr2 = []
min1 = []
min2 = []
sec1 = []
sec2 = []
index1 = 0
index2 = 0
index3 = 0
index4 = 0
index5 = 0
index6 = 0

ztn = [0,1,2,3,4,5,6,7,8,9]

anysix = [random.randint(0,9) for x in range(6)]
print(anysix)

def index_clk(any_six, index_pos, index, timelist, y):
    global index1

    for x in any_six:

        if x <= y:
            index_pos.append(x)

    if index_pos == []:
        print("no clock time possible")

    index = max(index_pos)
    index1 = index

    timelist.append(index)
    print(timelist)

    any_six.remove(index)
    print(any_six)

    index = index1

print(index_clk(any_six = anysix, index_pos = hr1, index = index1, timelist = sortime, y = 2))
##print(index1)

if index1<2:
    print(index_clk(any_six = anysix, index_pos = hr2, index = index2, timelist = sortime, y = 9))
else:
    print(index_clk(any_six = anysix, index_pos = hr2, index = index2, timelist = sortime, y = 3))

sortime.append(":")

print(index_clk(any_six = anysix, index_pos = min1, index = index3, timelist = sortime, y = 5))

print(index_clk(any_six = anysix, index_pos = min2, index = index4, timelist = sortime, y = 9))
sortime.append(":")

print(index_clk(any_six = anysix, index_pos = sec1, index = index5, timelist = sortime, y = 5))

print(index_clk(any_six = anysix, index_pos = sec2, index = index6, timelist = sortime, y = 9))

for i in sortime:
    print(i, end = "")

如上所述,我可以使用if-else实现DD-MM HH:MM格式。出于好奇,如果可以通过使用一些datetime对象并使用python格式化以简化代码来实现上述目的。

2 个答案:

答案 0 :(得分:0)

您可以将其与正则表达式匹配,以适合日期格式:

if re.match(r"^[0-9]{2}-[0-9]{2}\ [0-9]{2}:[0-9]{2}", testString):
    print('it is in "DD-MM HH:MM" format')

但这只会检查格式,而不检查日期是否有效,因为只需在检查格式之后或之前将其设置为datetime即可:

from datetime import datetime
try:
    date = datetime.strptime(testString, "%d-%m %H:%M")
except ValueError:
    print("Incorrect format or invalid date")

请注意,ValueError都将针对不正确的格式和“错误的”日期(如第13个月)引发,因此,如果要进行其他处理,请首先检查格式,例如使用正则表达式。

希望有帮助。

答案 1 :(得分:0)

实际上简单得多:

import datetime, random

dates = []
for _ in range(3):
    dates.append([random.randint(0, 9) for x in range(6)])
print(dates)

try:
    for i, date in enumerate(dates):
        dates[i] = datetime.datetime(year=date[0], month=date[1], day=date[2], hour=date[3], minute=date[4], second=date[5])
    print(max(dates))

except ValueError as e:
    print(e)

except中的打印内容将打印出日期问题。如果所有日期都正确生成,那么它将打印出最大的日期。
您不必使用显式参数将它们发送到datetime.datetime,我只是用它来显示它接受的参数的顺序。