我想知道我们是否可以比较Python中的两个日期字符串而不使用Python或库中的任何内置函数。 例如: 25/01/2017>二〇一七年十二月十二日
这实际上是假的,但它返回true。 提前谢谢。
答案 0 :(得分: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)
这确实使用了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
(不是真正的内置函数,但不清楚你的约束是什么)。你可以继续试图消除其中的一些,但我会停在那里:)
答案 1 :(得分:0)
是的,如果日期字符串的格式符合字典顺序(字母顺序),例如:" yyyymmdd"或" yyyy / mm / dd"。
示例:
d1 = "20170101"
d2 = "20170102"
print (d2 > d1) # True
print (d2 < d1) # False
print (d2 == d1) # False
<强>更新强>
如果你想比较具有相同格式的字符串,我们可以通过使用元组比较来改善Miket的答案:
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])
return (year, month, day) > (yearTwo, monthTwo, dayTwo)
答案 2 :(得分:0)
如果给定日期严格采用该格式,则可以将字符串解析出来。
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
给出值
compare("25/01/2017","12/12/2017")
这将是False
。此函数比较左操作数日期以查看它是否大于右操作数日期。
答案 3 :(得分:0)
你可以这样做:
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])