Python:在不使用内置函数或库的情况下比较日期字符串
我想知道我们是否可以比较Python中的两个日期字符串,而不使用Python或库中的任何内置函数。 例如: 2017年1月25日>2017年12月12日 这实际上是假的,但它返回真的。Python:在不使用内置函数或库的情况下比较日期字符串,python,string,date,Python,String,Date,我想知道我们是否可以比较Python中的两个日期字符串,而不使用Python或库中的任何内置函数。 例如: 2017年1月25日>2017年12月12日 这实际上是假的,但它返回真的。 提前感谢。如果日期字符串的格式符合字典顺序(字母顺序),例如:“yyyyymmdd”或“yyyy/mm/dd”,则可以 例如: d1 = "20170101" d2 = "20170102" print (d2 > d1) # True print (d2 < d1) # False print (
提前感谢。如果日期字符串的格式符合字典顺序(字母顺序),例如:“yyyyymmdd”或“yyyy/mm/dd”,则可以 例如:
d1 = "20170101"
d2 = "20170102"
print (d2 > d1) # True
print (d2 < d1) # False
print (d2 == d1) # False
如果给定的日期严格采用该格式,则可以将字符串解析为该格式
def compare(dateOne, dateTwo):
#Break up the date into its components
day = int(dateOne[0:2])
month = int(dateOne[3:5])
year = int(dateOne[6:10]))
dayTwo = int(dateTwo[0:2])
monthTwo = int(dateTwo[3:5])
yearTwo = int(dateTwo[6:10]))
#Compare the years first
if(year > yearTwo):
return True
elif(year < yearTwo):
return False
else:
#If the years are equal, then compare the months
if(month > monthTwo):
return True
elif(month < monthTwo):
return False
else:
#If the days are equal, return False since it's strictly greater, else, return the appropriate value.
if(day > dayTwo):
return True
else:
return False
它将是
False
。此函数用于比较左操作数日期是否大于右操作数日期 您可以这样做:
def compare(d1, d2):
for x, y in list(zip(map(int, d1.split('/')), map(int, d2.split('/'))))[::-1]:
if x != y:
return x > y
它从年份开始,如果两个年份相等,我们就转到月份。如果两个月都相等,那么我们就开始新的一天。如果date1的月/年/日大于date2的月/年/日,则返回True
并立即退出循环
或者,使用all
将其设为一行
def compare(d1, d2):
return all(x > y for x, y in list(zip(map(int, d1.split('/')), map(int, d2.split('/'))))[::-1])
这确实使用了map
功能。如果出于某种原因您不想使用,可以这样做:
def compare(date1, date2):
date1_parts = date1.split('/')
d1, m1, y1 = int(date1_parts[0]), int(date1_parts[1]), int(date1_parts[2])
date2_parts = date2.split('/')
d2, m2, y2 = int(date2_parts[0]), int(date2_parts[1]), int(date2_parts[2])
return (y1, m1, d1) > (y2, m2, d2)
现在它仍然使用
str.split
和int
(不是真正的内置函数,但不清楚约束是什么)。你可以继续尝试消除其中一些,但我就到此为止:)除非是学校作业,否则你不应该尝试“不使用内置函数或库”。如果是这样的话,你必须知道在哪一点上你不能使用“内置函数”——因为正确的比较包括拆分日、月和年的组成部分,或者将它们转换成整数,或者以一种实际可比较的方式重新分配日期字符串——但所有这些都需要一对“内置函数”“但结果是真的。”那么你已经开始了?你介意告诉我们你已经有了什么吗?这样我们就可以更容易地告诉你你做错了什么,而不是自己重新写吗?这是学校作业吗?不要让stackoverflow做作业,除非OP的那一年是最后一年。@Corymaden我想你漏掉了单词”例如,“在问题中OP使用的示例日期之前;)不错。但是有很多内置函数。如果OP可以使用它们,它们也可以使用时间模块。zip
,map
,int
,split
都是“内置的”“我想是函数。那么,一切都是内置函数。我假设这意味着没有导入。你可以在if语句中使用一个分支,然后说if x!=y:返回x>y
。啊,很好。这比我的要漂亮得多。请注意,您可以使用元组比较,而不是这三个嵌套的if语句。
def compare(d1, d2):
return all(x > y for x, y in list(zip(map(int, d1.split('/')), map(int, d2.split('/'))))[::-1])
def compare(date1, date2):
d1, m1, y1 = map(int, date1.split('/'))
d2, m2, y2 = map(int, date2.split('/'))
return (y1, m1, d1) > (y2, m2, d2)
def compare(date1, date2):
date1_parts = date1.split('/')
d1, m1, y1 = int(date1_parts[0]), int(date1_parts[1]), int(date1_parts[2])
date2_parts = date2.split('/')
d2, m2, y2 = int(date2_parts[0]), int(date2_parts[1]), int(date2_parts[2])
return (y1, m1, d1) > (y2, m2, d2)