Java Date / Calendar对象字符串,比较

时间:2011-06-13 18:14:31

标签: java string date calendar conditional

我的日期对象格式为

2011/06/13 17:52:20

并以字符串形式返回。我如何将这与另一个格式相同的日期进行比较。我想确定哪一个大于,小于或等于我正在形成的条件语句。

如果可能已经存在用于执行此操作的框架

,则无需重新发明轮子(或制作多个案例)

谢谢!

5 个答案:

答案 0 :(得分:5)

  • 使用SimpleDateFormat解析
  • 使用compareTo(..)获得的Date个对象

例如:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Date date1 = sdf.parse(string1);
Date date2 = sdf.parse(string2);

int result = date1.compareTo(date2);

结果是(来自java.util.Date文档):

  

如果参数Date等于此Date,则值为0;如果此Date在Date参数之前,则小于0的值;如果此Date位于Date参数之后,则值大于0。

答案 1 :(得分:2)

在我看来,你的日期格式是yyyy / mm / dd hh:mm:ss。如果是这种情况,你可以进行字符串比较,它会给你一个更准确的更大/更小/相等。该字符串被编码为最重要的最重要的字符串。

答案 2 :(得分:2)

我的同事上周向我指出,yyyy-MM-dd HH:mm:ss字符串与基础日期的排序完全兼容(只要字段全部为零填充)。因此,如果它们更容易获得,您可以只对字符串值进行compareTo。

答案 3 :(得分:0)

尽管SimpleDateFormat允许将文本解析为日期对象,但最好将日期存储为Date对象并在显示时对其进行解析。

创建/存储Date对象并使用其内置的compareTo()方法。

答案 4 :(得分:0)

TL;博士

LocalDateTime.parse( "2011/06/13 17:52:20".replace( " " , "T" ) )
             .isBefore( LocalDateTime.now() )
  

详细

其他答案是正确的,因为您可以(a)按字母顺序比较这些特定字符串,或(b)在解析为日期时间对象后按时间顺序进行比较。

请注意,日期时间格式没有“格式”。它们包含日期时间信息。他们可以生成一个特定格式的String,但是日期时间对象和字符串是分开的和不同的。

其他Answers使用现在遗留的麻烦的旧日期时间类,取而代之的是java.time类。

您的输入缺少有关UTC与时区偏移的信息。所以我们必须将它们解析为LocalDateTime个对象。要解析,请使用T替换中间的SPACE以符合ISO 8601标准,以格式化表示日期时间值的字符串。

String input = "2011/06/13 17:52:20".replace( " " , "T" );
LocalDateTime ldtThen = LocalDateTime.parse( input ) ;
LocalDateTime ldtNow = LocalDateTime.now( ZoneId.of( "America/Montreal" ) ) ;

比较

boolean ldtThenIsBefore = ldtThen.isBefore( ldtNow );
boolean ldtThenIsAfter = ldtThen.isAfter( ldtNow );
boolean ldtThenIsEqual = ldtThen.isEqual( ldtNow );

关于java.time

java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendar和& SimpleDateFormat

现在位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310

从哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如IntervalYearWeekYearQuartermore