2016-06-05 3 views
-2

У меня есть следующая проблема с классом даты. Я хочу сравнить строку, которая поставляется с методом toString() класса date, со строкой, которую пользователь дает в качестве даты и времени. При сравнении двух строк equals() всегда возвращает false, даже если я копирую/вставляю дату и время! Есть ли способ сравнить дату и временную строку успешно только с классом Date? Огромное спасибо!!Java класс даты, сравнивающий две строки дат

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("Even"); 
     }else{ 
      System.out.println("Not Even.."); 
     } 
    } 

} 

ответ

0

Вы должны использовать метод CompareTo в классе Date.

timeNow.compareTo(time); 
0

Вам нужно будет сравнить Даты, а не строки. Вам нужно будет проанализировать строку, которую пользователь дает вам в поле «Дата», а затем сравнить ее с другой датой. Класс Дата имеет методы before(Date), after(Date) и compareTo(Date) Пожалуйста, см Javadoc API для класса Дата: https://docs.oracle.com/javase/8/docs/api/java/util/Date.html

1

Поскольку еще никто не объяснил, почему нельзя сравнивать даты как строки, я буду делать это. «Дата» - это абстрактная идея, представляющая момент времени, а Java Date (или совсем недавно классы в java.time.*) - это класс, который реализует эту абстрактную концепцию. Строка (т. Е. От toString) является всего лишь одним из способов выразить абстрактную концепцию момента времени, и, как вы знаете, разные населенные пункты имеют разные способы выражения дат/времени.

Если вы хотите сравнить абстрактные «моменты времени», вы должны разобрать вход пользователя в класс, представляющий это мгновение, и сравнить моменты. Это позволяет проверить, что ввод пользователя представляет собой действительный момент вместо того, чтобы возвращать неправильный результат только потому, что пользователь сделал простую опечатку.

Тогда все вопросы часовых поясов, но это огромная тема, которая не входит в сферу применения здесь. Обработка данных - чрезвычайно глубокая и сложная тема, и ее очень сложно добиться.

+0

Вы можете предоставить логику, которая будет анализировать любую строку до даты, пока строка действительно содержит допустимую дату. Вот ссылка на статью по этой теме: https://www.linkedin.com/pulse/java-8-javatime-package-parsing-any-string-date-michael-gantman?trk=pulse_spock-articles –

+0

I понял, что ты сказал. Но есть ли другой способ сравнить день, месяц, год с пользователем с датами? timeNow.getYear() или getMonth(), похоже, не работает. – Cache

+0

_ «Кажется не работает» _ недостаточно информации, чтобы помочь вам. Как выглядит пользовательская дата? Пожалуйста, отредактируйте свой вопрос, чтобы показать соответствующую информацию. –

Смежные вопросы