我得到两个日期作为字符串值,我想检查开始时间早于结束时间.我比较它们,因为它没有将它们转换为使用日期SimpleDateFormat
,如下所示:
String startTime = "2013-01-02 14:25:56";
String endTime = "2013-01-02 14:30:56";
if(endTime.compareTo(startTime) > 0){
System.out.println("End time is greater than start time");
}
Run Code Online (Sandbox Code Playgroud)
是否真的有必要将它们转换为日期并进行比较?我会错过什么吗?我做对了吗?
Joa*_*uer 17
您将缺少的是验证日期是否格式正确.
如果日期格式与您每次显示的格式完全相同,那么这将起作用.如果它可能有所不同,那么解析和比较结果Date
对象将至少增加一些检查.
例如,如果一个两个日期碰巧被格式化为2013.01.02 14:30:56
或者甚至包括一个未格式化的日期,例如yesterday
你的代码会默默地承担了部分的顺序(即最有可能有一点与实际为了做到),并继续进行.它应该做的是通知用户(或日志文件,......)某些期望未得到满足.
sta*_*ker 11
是否真的有必要将它们转换为日期并进行比较?
如果您不必包含时区并且可以确保您始终具有此格式,则词汇顺序将起作用.
我会错过什么吗?
你失去了灵活性
我做对了吗?
这取决于观点.我在专门的搜索引擎中使用类似的东西(仅出于性能原因).通常我转换为日期并比较这些对象.
这不是一个好习惯和代码味道.
你失去了语义正确和可读的代码.(以及已经说过的可扩展性,时区和其他正确的事情)
你不想比较两个String
s,你想要比较2 Date
秒 - 所以这样做,比较两个Date
对象.
如果您创建单元测试并测试比较方法,则永远不会编写一个方法,在每种情况下都能正确地比较2个"字符串" - 日期,而不会将它们转换为日期.
当且仅当满足以下3个条件时,您可以比较日期时间而不正确解析它:
日期时间始终采用相同的格式:
Jan
> April
,Wed
> Thu
).10:01
< 1:01
(:
ASCII码比数字大).字段按单位大小的降序排列(右侧较大,左侧较小).例如:YEAR-MONTH-DAY HOUR:MINUTE:SECOND.MILISECOND
他们必须在同一时区.时区信息(如果存在)应该具有相同的表示(SGT
并且UTC+8
当前是等效的,但字符串比较不会知道这一点).注意,上述模糊条件"相同时区"足以比较相等,但为了比较大/小,在比较的两个日期之间必须没有时区发生变化.
归档时间: |
|
查看次数: |
12109 次 |
最近记录: |