Использование экземпляров GregorianCalendar для определения времени прошло? - PullRequest
0 голосов
/ 22 марта 2020

Я работаю над проектом в своем классе СНГ 163, который по сути является системой бронирования кемпингов. Основная часть кода была предоставлена, и мне просто нужно добавить к ней определенные функции. В настоящее время мне нужно иметь возможность определить, сколько времени прошло между двумя разными экземплярами GregorianCalendar (один - текущая дата, а другой - заранее определенный «извлечение»), представленный днями. Я не смог понять, как это сделать, и надеялся, что кто-то здесь сможет мне помочь.

Ответы [ 2 ]

1 голос
/ 22 марта 2020

GregorianCalendar устарел, и вы больше не должны его использовать. Он был громоздким и был заменен «новым» java .time модулем, поскольку Java 8.

Тем не менее, если вам нужно сравнить с использованием экземпляров G C, вы можете легко рассчитать время, используя миллисекунды между датами, например:

GregorianCalendar date1 = new GregorianCalendar();
GregorianCalendar date2 = new GregorianCalendar();

// Adding 15 days after the first date
date2.add(GregorianCalendar.DAY_OF_MONTH, 15);
long duration = (date2.getTimeInMillis() - date1.getTimeInMillis() )
                         / ( 1000 * 60 * 60 * 24) ;
System.out.println(duration);

Если вы хотите использовать новый API времени, будет работать следующий код.

LocalDate date1 = LocalDate.now();
LocalDate date2 = date1.plusDays(15);

Period period = Period.between(date1, date2);
int diff = period.getDays();
System.out.println(diff);

Если вам нужно преобразовать типы (например, вы работаете с унаследованным кодом), вы можете сделать это следующим образом:

LocalDate date3 = gcDate1.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
LocalDate date4 = gcDate2.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();

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

0 голосов
/ 24 марта 2020

Поскольку вы были вынуждены использовать старый и плохо спроектированный класс GregorianCalendar, первое, что вы должны сделать, - это преобразовать каждый из двух GregorianCalendar объектов в современный тип. Так как Java 8 GregorianCalendar имеет метод, который преобразует его в ZonedDateTime. Проверьте документацию, я включаю ссылку ниже.

Теперь, когда у вас есть два ZonedDateTime объекта, есть разные пути в зависимости от ваших точных требований. Часто можно использовать Duration.between() для определения продолжительности, промежутка времени между ними в часах, минутах, секундах и долях секунды. Если вы знаете, что вам всегда потребуется только одна из этих единиц времени, вы можете вместо этого использовать, например, ChronoUnit.HOURS.between() или ChronoUnit.MILLISECONDS.between(). Если вам нужно сосчитать дни, используйте ChronoUnit.DAYS.between().

Если вместо этого вам нужно время в месяцах и днях, вам следует вместо этого использовать Period.between().

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

Ссылки

...