在外部服务中,我将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解析与日期进行比较以进行比较是否存在任何性能因素,优缺点?
答案 0 :(得分:5)
假设小时是24小时格式,那么是,这是一种可排序的日期/时间格式 - 其众所周知的好处之一是您可以排序而无需实际解析。
一个缺点:如果你得到不好的数据,你就不会发现它 - 你只是整齐地将它排序到“正确”的地方,而忽略了你已经被给予(比如说)2月30日的事实。 p>
如果您稍后需要值作为日期/时间,那么我先解析它然后进行比较。但是如果只在排序方面需要这个,那么字符串比较可能比解析所有内容更快。当然值得基准测试......尤其是在同一天比较两个字符串时需要多个字符值得检查,而如果你已经解析过它,那么你可能只需比较long
值。
答案 1 :(得分:2)
不,更好的方法是在日期对象中解析字符串,然后与其他日期对象进行比较。
答案 2 :(得分:2)
我不担心性能,除非你有理由认为这段代码会成为瓶颈(在循环中多次调用),即便如此,我还要等到你能做一些具体的性能测试。
将它们作为日期进行比较将使您的代码更清晰,并且意味着您可以在以后更轻松地更改日期格式(对于不作为字符串排序的内容)。
答案 3 :(得分:2)
它提供了
答案 4 :(得分:1)
使用它所代表的类型 - 在这种情况下,它是一个日期,所以使用日期。通过将日期添加到集合并在日期上执行Collections.sort(日期),可以按时间顺序轻松地对日期进行排序。
请参阅http://docs.oracle.com/javase/tutorial/collections/interfaces/order.html
答案 5 :(得分:1)
我认为比较日期或可以通过毫秒(长)进行比较,这更快。这可能是更安全的方式,你不需要考虑字符串比较何时不适合。