字符串格式日期对比:直接字符串比较还是转Date后比较?
直接比较
yyyy-MM-dd格式的日期字符串是否可靠? 结论:只要所有日期字符串严格遵循yyyy-MM-dd格式,直接用字符串比较是完全可靠的,不需要转成Date类型。
为什么可靠?
yyyy-MM-dd格式的字符串刚好匹配字符串比较的逻辑:
- 按年→月→日的优先级排列,和日期的先后顺序逻辑完全一致;
- 年是4位固定长度,月、日都是2位固定长度(不足补前导0),每个部分的数字字符ASCII值顺序和数值顺序完全对应。
字符串比较是逐字符按ASCII值对比的,举两个实际例子:
"2022-11-13"和"2022-11-14":前8位完全相同,第9位3的ASCII值小于4,所以字符串比较结果"2022-11-13" < "2022-11-14",和实际日期顺序一致;"2022-10-31"和"2022-11-01":第6位0的ASCII值小于1,所以字符串比较结果"2022-10-31" < "2022-11-01",也符合实际日期先后关系。
必须遵守的前提
所有日期字符串必须是严格的yyyy-MM-dd格式,月和日必须是两位数字(比如1月要写成01,5日要写成05)。如果格式不规范(比如写成2022-9-30),字符串比较就会出错:
- 错误示例:
"2022-9-30"和"2022-10-01",字符串比较时第5位9的ASCII值大于1,会得出"2022-9-30" > "2022-10-01"的错误结论,但实际9月30日比10月1日更早。
总结
只要能确保日期格式的规范性,直接用字符串比较的方式既简洁又可靠,完全可以替代转Date的方式。
内容的提问来源于stack exchange,提问作者Sonius
相关产品推荐
相关产品推荐

