Дата обновления внутри какое-то время l oop, Java - PullRequest
1 голос
/ 31 марта 2020

Я пытаюсь сравнить реальную дату с введенной пользователем датой в течение некоторого времени l oop. Несмотря на то, что первоначальное выполнение корректно, во второй раз дата выполнения остается неизменной. Я пытался запросить дату в то время как l oop и теперь совсем недавно из метода класса, но все же дата остается той же.

Как я могу получить последнюю дату?

import java.util.Date;

import java.util.Scanner;

class Watch {
    Date CurrentTimeAndDate = new Date();

    int CurrentMinutes() {
        int currentMinutes = CurrentTimeAndDate.getMinutes();
        System.out.println(currentMinutes);
        return currentMinutes;
    }
}

public class App {

    public static void main(String[] args) throws InterruptedException {

        Scanner input = new Scanner(System.in);
        String timer = null;
        int i = 0;
        int num = 0;
        Date TimeAndDate = new Date();
        int getDay = TimeAndDate.getDay();
        int getMonth = TimeAndDate.getMonth() + 1;
        int getYear = TimeAndDate.getYear() + 1900;
        int getMinutes = TimeAndDate.getMinutes();
        Watch watch1 = new Watch();

        String[] Month = { "", "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };
        String[] Day = { "", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun" };
        System.out.println("Current time and date is    " + TimeAndDate);
        System.out.println("Printing my way! " + Day[getDay] + " " + Month[getMonth] + " " + getYear + " " + getMinutes);
        System.out.println(" Enter a short description of what you want reminding about ");
        String rem = input.nextLine();
        System.out.println(" Enter date of reminder 1-7");
        while (i < 7) {
            System.out.println(i + 1 + " = " + Day[i + 1]);
            i++;
        }
        int day = input.nextInt();

        System.out.println("Enter Month of reminder");
        i = 0;
        while (i < 12) {
            System.out.println(i + 1 + " " + "=" + " " + Month[i + 1]);
            i++;
        }
        int month = input.nextInt();
        System.out.println("Enter year");
        int year = input.nextInt();
        System.out.println("Enter Minutes, for testing purposes");
        int userInputMinutes = input.nextInt();
        System.out.println("Date set to remind you about " + rem + " " + Day[day] + " " + Month[month] + " " + year);
        if (year > getYear) {
            System.out.println("Its time to remind you about ");
        } else {
            System.out.println("Waiting");
        }
        int Mins = 0;
        while (userInputMinutes != Mins) {
            Mins = watch1.CurrentMinutes();
            System.out.println("Current Minutes = " + getMinutes);
            System.out.println("Entered minutes =" + userInputMinutes);
            Thread.sleep(10000);
        }
        System.out.println("Its time to remind you about " + rem);
    }
    public static void Date(String time) {
    }

}

Ответы [ 2 ]

2 голосов
/ 31 марта 2020

Во-первых, используйте java .time, современный Java API даты и времени, для работы с датой и временем. Всегда. Класс Date, который вы использовали (на самом деле неправильно, я вернусь к этому), плохо спроектирован и давно устарел. Никогда не используйте это.

Получение текущих минут

Чтобы получить текущую минуту часа:

int currentMinutes() {
    return LocalTime.now(ZoneId.systemDefault()).getMinute();
}

Чтобы прочитать день недели или месяц от пользователя

Также используйте java .time для дней недели и месяцев. Ваш код изобретает колеса. Вы должны предпочесть использовать библиотечные классы и методы, которые уже есть для вас. Например:

    System.out.println(" Enter day of week of reminder 1-7");
    for (DayOfWeek dow : DayOfWeek.values()) {
        System.out.println("" + dow.getValue() + " = " + dow
                .getDisplayName(TextStyle.SHORT_STANDALONE, Locale.ENGLISH));
    }
    int day = input.nextInt();
    DayOfWeek dow = DayOfWeek.of(day);
    System.out.println("You have chosen " + dow);

Пример взаимодействия:

 Enter day of week of reminder 1-7
1 = Mon
2 = Tue
3 = Wed
4 = Thu
5 = Fri
6 = Sat
7 = Sun
2
You have chosen TUESDAY

Большинство методов класса Date устарели по причине

Как я уже говорил Date плохо спроектирован и давно устарел. Более того, большинство конструкторов и методов класса устарели в Java 1.1 в феврале 1997 года, потому что они работают ненадежно в разных часовых поясах. Поэтому, даже если вы настаивали на использовании Date (что, я надеюсь, вам не нужно), вы все равно должны держаться подальше от устаревших методов, включая все методы get, за исключением getTime (который с начала эпохи преобразуется в миллисекунды). ).

Ссылка

Oracle учебник: Дата и время , объясняющие, как использовать java .time.

2 голосов
/ 31 марта 2020

Вы устанавливаете новую дату () только один раз. Таким образом, вы получите то же самое в то время как l oop итераций. Чтобы получить новую дату для каждой итерации, вы должны установить код ниже, в то время как l oop

TimeAndDate = new Date();
int getDay = TimeAndDate.getDay();
int getMonth = TimeAndDate.getMonth() + 1;
int getYear = TimeAndDate.getYear() + 1900;
int getMinutes = TimeAndDate.getMinutes();
Watch watch1 = new Watch();

* Примечание: Date является устаревшим классом. Пожалуйста, обратитесь к @Ole VV для правильного использования класса. *

...