我有日期类的以下问题。我想比较日期类的toString()方法附带的字符串,以及用户提供的字符串作为日期和时间。比较两个字符串时,即使我复制/粘贴日期和时间,equals()也总是返回false!有没有办法只将日期和时间字符串与Date类成功比较?非常感谢!!
import java.util.Date;
import java.util.Scanner;
public class SystemTest {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String timeNow = new String((new Date()).toString());
System.out.println(timeNow);
System.out.println("Give date and time: ");
String time = new String(input.next());
if(time.equals(timeNow)){
System.out.println("same");
}else{
System.out.println("Not same..");
}
}
}
EDITED
我不得不使用日期类来正确比较日期!
既然没有人解释为什么你不应该把日期比作字符串,我会这样做。 “日期”是表示时间瞬间的抽象概念,Java Date
(或最近的java.time.*
中的类)是实现该抽象概念的类。字符串(即来自toString
)只是表达瞬间抽象概念的一种方式,正如您所知,不同的地方有不同的表达日期/时间的方式。
如果要比较抽象的“时间瞬间”,那么您应该将用户的输入解析为表示该瞬间的类并比较时刻。这允许您验证用户的输入是否代表有效的瞬间而不是仅仅因为用户输入了一个简单的拼写错误而返回错误的结果。
然后是整个时区问题,但这是一个超出范围的巨大话题。日期操作是一个非常深刻和复杂的主题,很难做到正确。
您应该使用Date类中的compareTo方法。
timeNow.compareTo(time);
您需要比较日期而不是字符串。您需要将用户提供的字符串解析为Date,然后将其与另一个日期进行比较。类Date有方法before(Date)
,after(Date)
和compareTo(Date)
请参阅类Javadoc API日期:https://docs.oracle.com/javase/8/docs/api/java/util/Date.html