【发布时间】:2011-09-14 03:13:06
【问题描述】:
我的日期对象格式类似于
2011/06/13 17:52:20
并以字符串形式返回。我如何将其与以相同方式格式化的另一个日期进行比较。对于我正在形成的条件语句,我想确定哪个大于、小于或等于。
当可能已经有这样做的框架时,无需重新发明轮子(或制作几个案例)
谢谢!
【问题讨论】:
标签: java string date calendar conditional
我的日期对象格式类似于
2011/06/13 17:52:20
并以字符串形式返回。我如何将其与以相同方式格式化的另一个日期进行比较。对于我正在形成的条件语句,我想确定哪个大于、小于或等于。
当可能已经有这样做的框架时,无需重新发明轮子(或制作几个案例)
谢谢!
【问题讨论】:
标签: java string date calendar conditional
SimpleDateFormat解析Date对象中的compareTo(..)
例如:
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。
【讨论】:
在我看来,您的日期格式是 yyyy/mm/dd hh:mm:ss。如果是这种情况,您可以进行字符串比较,它将为您提供准确的更大/更少/等于。该字符串被编码为最重要到最不重要。
【讨论】:
我的同事上周向我指出,yyyy-MM-dd HH:mm:ss 字符串与基础日期的顺序完全兼容(只要字段都是零填充的)。因此,如果 String 值更容易获得,您可以只对它们进行 compareTo。
【讨论】:
虽然 SimpleDateFormat 允许将文本解析为日期对象,但最好将日期存储为 Date 对象并在显示时对其进行解析。
创建/存储 Date 对象并使用它们内置的 compareTo() 方法。
【讨论】:
LocalDateTime.parse( "2011/06/13 17:52:20".replace( " " , "T" ) )
.isBefore( LocalDateTime.now() )
是的
其他答案是正确的,因为您可以 (a) 按字母顺序比较这些特定字符串,或 (b) 在解析为日期时间对象后按时间顺序比较。
请注意,日期时间格式没有“格式”。它们包含日期时间信息。他们可以生成一个特定格式的字符串,但是日期时间对象和字符串是分开和不同的。
其他答案使用麻烦的旧日期时间类,它们现在是遗留的,被 java.time 类取代。
您的输入缺少有关与 UTC 的偏移量和时区的信息。所以我们必须将它们解析为LocalDateTime 对象。要进行解析,请将中间的 SPACE 替换为 T,以符合 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。
【讨论】: