Java:可以将日期作为字符串进行比较吗

Java:可以将日期作为字符串进行比较吗,java,string,compareto,Java,String,Compareto,从一个外部服务中,我得到了Date+Time字段为String,格式为2012-03-07 12:12:23.547的对象,我需要比较这些字段以获得对象的正确顺序。我很清楚,我可以通过SimpleDataFormat(“yyyy-MM-dd HH:MM:ss.SSS”)创建Date对象,并比较两个Date,以实现这一点,但我的问题是,如果我将它们作为字符串进行比较,例如String.compareTo(String),是否可以依赖正确的排序顺序?一些光测试给我的印象是它是有效的,但我想知道是否有

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

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

假设小时为24小时格式,则是,这是一种可排序的日期/时间格式——它的一个众所周知的优点是,您可以在不进行实际解析的情况下进行排序

一个缺点是:如果你得到了不好的数据,你不会发现它——你只会把它整齐地分类到“正确”的地方,而忽略了你得到(比如)2月30日的数据这一事实


如果以后需要该值作为日期/时间,那么我将首先解析它,然后进行比较。但是,如果您只需要在排序方面使用它,那么字符串比较可能比解析所有内容都要快。当然,值得进行基准测试。。。特别是当在同一天比较两个字符串时,需要检查几个字符,而如果您对其进行了一次解析,则可能只需比较
long
值。

我不会担心性能,除非您有理由认为此代码将成为瓶颈(称为循环中的多次)即使那样,我也会等到你能做一些具体的性能测试


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

使用它所表示的类型-在这种情况下,它是一个日期,所以请使用日期。通过将日期添加到集合并进行集合,可以很容易地按时间顺序对日期进行排序

请参见提供的

  • 您可以将字段从最重要到最不重要排序
  • 您使用数字字段(不是一月/二月),并且它们的宽度相同。e、 g.2:15在12:15之后,但02:15在预期之前。注意:对于9999年之后和0001年之前的年份,这将不起作用
  • 您接受可能无法检测到无效日期

我认为日期是比较的,或者可以通过毫秒(长)来比较,毫秒(长)更快。这可能是一种更安全的方法,您不需要考虑什么时候字符串比较不合适。

如果您的日期格式始终保持以年为单位分割秒的顺序,则应该可以,并且实际上可能比转换为日期然后进行比较更有效。如果你的约会方式有任何变化,你可能会遇到麻烦。谢谢Jon+所有提供答案的人。