Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
比较Java中的日期字符串_Java_Date - Fatal编程技术网

比较Java中的日期字符串

比较Java中的日期字符串,java,date,Java,Date,因此,我使用了dateString1.compareTo(dateString2),它根据每个字符的Unicode值对字符串进行词典比较,并返回一个int。下面是一个代码示例 String dateString1 = "05-12-2012"; String dateString2 = "05-13-2012"; if (dateString1.compareTo(dateString2) <=0){ System.out.println("dateString1 is an ear

因此,我使用了
dateString1.compareTo(dateString2)
,它根据每个字符的Unicode值对字符串进行词典比较,并返回一个int。下面是一个代码示例

String dateString1 = "05-12-2012";
String dateString2 = "05-13-2012";
if (dateString1.compareTo(dateString2) <=0){
   System.out.println("dateString1 is an earlier date than dateString2");
}
String dateString1=“05-12-2012”;
字符串dateString2=“05-13-2012”;

如果(dateString1.compare)与(dateString2)相比,情况非常糟糕,因为现在您无法处理年度变化


如果您想这样做,您可能希望将日期格式化为
YYYY-MM-DD
,这样新年就不会毁了它。

我建议您做正确的事情()并转换为适当的
date
对象进行比较。如果它实际影响到您的应用程序(可能不会影响到您的应用程序),请担心性能影响.

在Java中使用字符串来处理日期并不总是最好的选择。例如,当是闰年时,2月有额外的一天。因为字符串看起来可能是正确的,所以执行转换更合适。Java验证日期是否正确

可以使用类将字符串转换为日期

publicstaticvoidmain(字符串[]args)引发异常{
字符串dateString1=“05-12-2012”;
字符串dateString2=“05-13-2012”;
SimpleDateFormat=新的SimpleDateFormat(“dd-MM-yyyy”);
Date date1=format.parse(dateString1);
Date date2=format.parse(dateString2);

如果(date1.compareTo(date2)如果您对每个日期只进行一次读取,那么YYYYMMDD(而不是像您那样的MMDDYYYY)可能是最理想的解决方案。但是,当您打算对每个日期进行多次处理(例如,对其进行排序)时,最好将其更改为比字符串(例如,日期)更快比较的对象

使用字母排序规则来处理日期排序是不好的,主要是因为您遇到的问题是,根据字母表和数字系统,事情的顺序不同

01, 02, 2011 comes after
01, 1, 2011  because all fields are being compared like numbers
字母表

01-02-2011 comes before
01-1-2011 (because 0 in the date field is before 1 in the other date field)
对于数字系统

01, 02, 2011 comes after
01, 1, 2011  because all fields are being compared like numbers
Date对象扩展了数值比较,以了解哪些字段在比较中优先,因此您不会得到一个较早的月份,将日期“放在”实际发生在较后月份但较早年份的另一个月份之前

如果您对日期格式有严格的控制,则可以对齐日期,使其也遵循字母规则;但是,如果您意外地插入了格式错误的日期,这样做可能会导致整个程序以奇怪的方式失败

执行此操作的典型方法是(不推荐,请使用非字符串日期比较)


最后一种技术主要是因为您最终会在野外看到它,并且应该认识到它是什么:尝试在没有适当的日期库的情况下处理日期(也称为聪明的破解)。

如前所述,通常使用日期时间对象比使用字符串更好

java.time 其他答案使用过时的日期时间类,这些类被证明设计糟糕、容易混淆且麻烦。它们缺少一个真正表示只包含日期的值的类,而不包含一天中的时间和时区

取而代之的是使用Java 8和更高版本中内置的框架。请参阅。中的许多Java.time功能都被移植到Java 6和7中,并进一步适应了中的Android

LocalDate
实现了
compareTo
。此外,您还可以调用equals、isBefore、isAfter方法

Boolean isEarlier = ld.isBefore( someOtherLocalDate );

看看我前一段时间提出的这个问题,任何建议将日期作为字符串进行比较的方法都值得友好地打几拳!:)YYYYMMDD可以作为字符串进行比较。是的,prints
dateString1的日期早于dateString2
。代码有问题吗?日期字符串的格式与SimpleDateFormat构造函数的格式不同。我没有注意到。谢谢你的提示。我喜欢你的答案,请投赞成票,但我仍然不明白如何不转换为date object将使我的代码在闰年失败。我将在字典上比较的是“02-29-2014”和“02-28-2014”。通过字符串比较仍然返回正确的值。仅当字符串正确时,比较字符串才有效。使用
Date
您可以确保这一点。谢谢。您能为最后一部分提供参考吗?此案例对我很有效,但我只想确保逻辑是完整的,2017年(及以后)除外,改为
LocalDate
Date
在2012年是个不错的选择,现在已经过时很久了)。
String input = "05-12-2012";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "MM-dd-yyyy" );
LocalDate ld = LocalDate.parse( input , formatter );
Boolean isEarlier = ld.isBefore( someOtherLocalDate );