日期字符串直接比较大小有没有问题?

之前有做过根据日期筛选数据的功能,然后自然就要比较日期大小。
那么问题来了, '20180320'>'20180310' 以及'2018/03/20'>'2018/03/10'这种写法对不对呢?比较结果是正确的,但是我不清楚这样写有没有隐患,各位大佬能解释下吗?我没查到相关资料。

阅读 20.1k
5 个回答

日期字符串可以写成YYYY/mm/ddYYYY-mm-ddYYYYmmdd等多种格式,当两个格式相同的日期字符串之间进行比较时,对应位上的分隔符是一定相同的,因此可以排除掉,最终等价于两个YYYYmmdd格式的字符串之间进行比较。
先看年份的YYYY,它是一个四位数,根据基本的数学知识可以知道如果两个位数相同的数的前n位相同,第n+1位数1大于数2,那么数1一定大于数2。而字符串比较大小的逻辑是从左往右依次比较字符的ASCII值,刚好和数字比较大小的逻辑是相同的,因此如果字符串YYYY>Y'Y'Y'Y',那么数字YYYY也一定>Y'Y'Y'Y'。同理也适用于月份的mm和日期的dd。由于权重年>月>日,可以进一步把年月日拼成一个8位数YYYYmmdd,然后根据同样的原理得出如果字符串YYYYmmdd>Y'Y'Y'Ym'm'd'd',那么数字YYYYmmdd也一定>Y'Y'Y'Y'm'm'd'd',日期前者也必定大于后者。
这里有个前提是日期字符串的格式必须是年在前,月在中,日在后,如果格式类似于mm/dd/YYYY那么很显然就不能直接比较了。

不建议你这样比较,最好的办法把时间改为毫秒来比较

根据日期筛选数据的功能,然后自然就要比较日期大小。
这个需求吧,其实都无所谓,不过建议换成时间戳

>>> print('2020-8-11' < '2020-8-7')
True
>>> print('2020-08-11' < '2020-08-07')
False

年月日顺序的标准日期可对比

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏