我的日期对象格式为
2011/06/13 17:52:20
并以字符串形式返回。我如何将这与另一个格式相同的日期进行比较。我想确定哪一个大于,小于或等于我正在形成的条件语句。
如果可能已经存在用于执行此操作的框架
,则无需重新发明轮子(或制作多个案例)谢谢!
答案 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)
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 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和& SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
从哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。