Получение количества дней, недель и лет, когда даты начала и окончания указаны в java - PullRequest
0 голосов
/ 20 октября 2011

Я новичок в Java.То, что я хочу, - это когда я передаю дату начала и дату окончания функции в качестве параметров, я хочу получить количество дней, количество месяцев и количество лет между датой начала и окончания.

Ответы [ 2 ]

3 голосов
/ 20 октября 2011

Если вы используете JodaTime , все просто:

DateTime start = // your start date
DateTime end = // your end date
int days = Days.daysBetween(start, end).getDays();
int months = Months.monthsBetween(start, end).getMonths();
int years = Years.yearsBetween(start, end).getYears();
0 голосов
/ 07 сентября 2016

ТЛ; др

Period.between( 
    LocalDate.of( 2011 , 1 , 1) , 
    LocalDate.now( ZoneId.of( "America/Montreal" ) ) 
).toString();  // Example: P5Y4M2D

java.time

Ответ Флойд правильный, но устаревший. Проект Joda-Time находится в режиме обслуживания, и его команда советует перейти на классы java.time.

LocalDate

Класс LocalDate представляет дату без времени суток и без часового пояса.

LocalDate start = LocalDate.of( 2011 , 1 , 1 );
LocalDate stop = LocalDate.of( 2016 , 1 , 15 );

ChronoUnit

Класс ChronoUnit вычисляет прошедшее время.

long elapsedInYears = ChronoUnit.YEARS.between( start , stop );
long elapsedInMonths = ChronoUnit.MONTHS.between( start , stop );
long elapsedInDays = ChronoUnit.DAYS.between( start , stop );

Period

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

Period p = Period.between( start , stop );

Чтобы получить удобный формат ISO 8601 в формате String, позвоните по номеру toString. Формат PnYnMnDTnHnMnS, где P отмечает начало, а T отделяет годы-месяцы-дни от часов-минут-секунд. Таким образом, полтора месяца будет P1M15D.

String output = p.toString(); 

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

int years = p.getYears();
int months = p.getMonths();
int days = p.getDays();

О java.time

Платформа java.time встроена в Java 8 и более поздние версии. Эти классы вытесняют проблемные старые классы даты и времени, такие как java.util.Date, .Calendar и & java.text.SimpleDateFormat.

Проект Joda-Time , теперь в режиме обслуживания , рекомендует перейти на java.time.

Чтобы узнать больше, см. Oracle Tutorial . И поиск переполнения стека для многих примеров и объяснений.

Большая часть функциональности java.time перенесена в Java 6 & 7 в ThreeTen-Backport и дополнительно адаптирована для Android в ThreeTenABP (см. Как использовать… ).

Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является полигоном для возможных будущих дополнений к java.time. Здесь вы можете найти некоторые полезные классы, такие как Interval, YearWeek, YearQuarter и другие.

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