Класс дат Java, сравнивающий две строки дат

У меня есть следующая проблема с классом даты. Я хочу сравнить строку, которая поставляется с методом 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("Even");
        }else{
            System.out.println("Not Even..");
        }
    }

}

3 ответа

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

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

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

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

timeNow.compareTo(time);

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

Другие вопросы по тегам