Как изменить мой код, чтобы результаты основывались на вводе пользователем лет и дней? - PullRequest
0 голосов
/ 01 января 2011

Я написал код ниже, чтобы вычислить дату «два года назад» на основе «сегодняшней даты», а также дату «на 5 дней вперед».

Я хочу сделатьдинамическая версия кода, следуя тому же принципу сравнения.Например, я хочу, чтобы пользователь вставил числа лет и дней и сравнил их с сегодняшней датой.


Код:

public class Calendar1{
    private static void doCalendarTime() {
        System.out.print("*************************************************");
        Date now = Calendar.getInstance().getTime();
        System.out.print("  \n Calendar.getInstance().getTime() : " + now);
        System.out.println();
    }

    private static void doSimpleDateFormat() {
        System.out.print("*************************************************");
        System.out.print("\n\nSIMPLE DATE FORMAT\n");
        System.out.print("*************************************************");
        // Get today's date
        Calendar now = Calendar.getInstance();
        SimpleDateFormat formatter = new SimpleDateFormat("E yyyy.MM.dd 'at' hh:mm:ss a zzz");
        System.out.print(" \n It is now : " + formatter.format(now.getTime()));
        System.out.println();
    }

    private static void doAdd() {
        System.out.println("ADD / SUBTRACT CALENDAR / DATEs");
        System.out.println("=================================================================");
        // Get today's date
        Calendar now = Calendar.getInstance();
        Calendar working;
        SimpleDateFormat formatter = new SimpleDateFormat("E yyyy.MM.dd 'at' hh:mm:ss a zzz");
        working = (Calendar) now.clone();
        working.add(Calendar.DAY_OF_YEAR, - (365 * 2));
        System.out.println ("  Two years ago it was: " + formatter.format(working.getTime()));
        working = (Calendar) now.clone();
        working.add(Calendar.DAY_OF_YEAR, + 5);
        System.out.println("  In five days it will be: " + formatter.format(working.getTime()));
        System.out.println();
    }

    public static void main(String[] args) {
        System.out.println();
        doCalendarTime();
        doSimpleDateFormat();
        doAdd();

    }
}

1 Ответ

1 голос
/ 17 июля 2012

Стандартные API даты и времени Java не очень хороши для операций с датами. Если вы хотите делать реальные вычисления по датам, я предлагаю библиотеку, такую ​​как Joda-Time, которая имеет гораздо лучшую функциональность для таких случаев.


Вот код Joda-Time, следующий за тем же примером, который использовался в вопросе:

DateTime now = new DateTime();
DateTime twoYearsAgo = now.minusYears(2);
DateTime fiveDaysFromNow = now.plusDays(5);

DateTimeFormatter formatter = new DateTimeFormatterBuilder()
   .appendPattern("E yyyy.MM.dd 'at' hh:mm:ss a zzz")
   .toFormatter();

System.out.println(formatter.print(twoYearsAgo));
System.out.println(formatter.print(fiveDaysFromNow));

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...