2012-03-07 46 views
2

从外部服务中,我得到Date+Time字段的对象为String的格式为2012-03-07 12:12:23.547,我需要比较这些字段以获取对象的正确顺序。我很清楚,我可以通过例如创建Date对象。 SimpleDateFormat(“yyyy-MM-dd HH:mm:ss.SSS”)并比较两个Date的实现,但我的问题是如果我可以依靠正确的排序顺序,如果我将它们比作字符串,如String.compareTo(String)?一些轻度测试给我的印象是,它的工作原理,但我想知道是否有人知道任何情况下,它不会给我正确的结果?还有,比较String的Vs解析到日期进行比较是否有任何性能考虑因素,优点或缺点?Java:可以将日期作为字符串进行比较

+0

提供您的日期格式始终保持在年份分裂秒数应该是好的,实际上可能比转换为日期然后比较更有效。如果您的日期格式发生变化,您可能会遇到麻烦。 – mcfinnigan 2012-03-07 11:27:24

回答

5

假设小时格式为24小时格式,那么是的,这是一种可排序的日期/时间格式 - 其众所周知的好处之一是您可以在没有实际解析的情况下进行排序。

一个缺点是:如果你收到了不好的数据,你就不会发现它 - 你会把它整齐地分类到“正确的”地方,而忽略了你被给予(说)2月30日的事实。

如果您以后需要将值作为日期/时间,那么我会先解析它然后进行比较。但是如果你只需要需要这样的排序,字符串比较可能比解析一切都快。值得进行基准测试,当然......特别是在同一天比较两个字符串将需要几个字符 - 值得检查,而如果你已经解析了它,那么可能只是比较long的值。

+0

感谢Jon +提供答案的其他人。 – hgus1294 2012-03-07 11:48:18

2

不,更好的方法是解析日期对象中的字符串,然后与其他日期对象进行比较。

2

我不担心性能,除非你有理由认为这个代码会成为一个瓶颈(在循环内被称为很多次),甚至在那之前我会等到你可以做一些具体的性能测试。

将它们作为日期进行比较将使您的代码更加清晰,并且意味着您将来可以更轻松地更改日期格式(对于不按字符串排序的内容)。

2

它的工作原理提供

  • 您从最显著责令领域最显著。
  • 您使用数字字段(不是1月/ 2月),它们是相同的宽度。例如2:15在12:15之后但是02:15之前如预期那样。注意:在9999之后和0001之前的这段时间内,这将不起作用。
  • 您接受可能无法检测到无效日期。
1

我认为日期是比较或可以比较通过更快的毫秒(长)。这可能是更安全的方式,你不需要考虑字符串比较不适合的情况。

相关问题