Java 8 - Примеры периода и продолжительности
Несколько примеров, которые покажут вам, как использовать объекты Java 8Duration
,Period
иChronoUnit
, чтобы узнать разницу между датами.
-
Продолжительность - время в секундах и наносекундах.
-
Период - измеряет время в годах, месяцах и днях.
1. Пример продолжительности
Примерjava.time.Duration
для определения разницы в секундах между двумяLocalDateTime
DurationExample.java
package com.example.time; import java.time.Duration; import java.time.LocalDateTime; import java.time.Month; import java.time.temporal.ChronoUnit; public class DurationExample { public static void main(String[] args) { // Creating Durations System.out.println("--- Examples --- "); Duration oneHours = Duration.ofHours(1); System.out.println(oneHours.getSeconds() + " seconds"); Duration oneHours2 = Duration.of(1, ChronoUnit.HOURS); System.out.println(oneHours2.getSeconds() + " seconds"); // Test Duration.between System.out.println("\n--- Duration.between --- "); LocalDateTime oldDate = LocalDateTime.of(2016, Month.AUGUST, 31, 10, 20, 55); LocalDateTime newDate = LocalDateTime.of(2016, Month.NOVEMBER, 9, 10, 21, 56); System.out.println(oldDate); System.out.println(newDate); //count seconds between dates Duration duration = Duration.between(oldDate, newDate); System.out.println(duration.getSeconds() + " seconds"); } }
Выход
--- Examples --- 3600 seconds 3600 seconds --- Duration.between --- 2016-08-31T10:20:55 2016-11-09T10:21:56 6048061 seconds
2. Пример периода
Примерjava.time.Period
, чтобы узнать по-разному (годы, месяцы, дни) между двумяLocalDates
PeriodExample.java
package com.example.time; import java.time.LocalDate; import java.time.Month; import java.time.Period; public class PeriodExample { public static void main(String[] args) { System.out.println("--- Examples --- "); Period tenDays = Period.ofDays(10); System.out.println(tenDays.getDays()); //10 Period oneYearTwoMonthsThreeDays = Period.of(1, 2, 3); System.out.println(oneYearTwoMonthsThreeDays.getYears()); //1 System.out.println(oneYearTwoMonthsThreeDays.getMonths()); //2 System.out.println(oneYearTwoMonthsThreeDays.getDays()); //3 System.out.println("\n--- Period.between --- "); LocalDate oldDate = LocalDate.of(1982, Month.AUGUST, 31); LocalDate newDate = LocalDate.of(2016, Month.NOVEMBER, 9); System.out.println(oldDate); System.out.println(newDate); // check period between dates Period period = Period.between(oldDate, newDate); System.out.print(period.getYears() + " years,"); System.out.print(period.getMonths() + " months,"); System.out.print(period.getDays() + " days"); } }
Выход
--- Examples --- 10 1 2 3 --- Period.between --- 1982-08-31 2016-11-09 34 years,2 months,9 days
3. Пример ChronoUnit
В качестве альтернативы вы можете использоватьChronoUnit.{unit}.between
, чтобы узнать разницу между датами, просмотрите следующий пример:
ChronoUnitExample.java
package com.example.time; import java.time.LocalDateTime; import java.time.Month; import java.time.temporal.ChronoUnit; public class ChronoUnitExample { public static void main(String[] args) { LocalDateTime oldDate = LocalDateTime.of(1982, Month.AUGUST, 31, 10, 20, 55); LocalDateTime newDate = LocalDateTime.of(2016, Month.NOVEMBER, 9, 10, 21, 56); System.out.println(oldDate); System.out.println(newDate); // count between dates long years = ChronoUnit.YEARS.between(oldDate, newDate); long months = ChronoUnit.MONTHS.between(oldDate, newDate); long weeks = ChronoUnit.WEEKS.between(oldDate, newDate); long days = ChronoUnit.DAYS.between(oldDate, newDate); long hours = ChronoUnit.HOURS.between(oldDate, newDate); long minutes = ChronoUnit.MINUTES.between(oldDate, newDate); long seconds = ChronoUnit.SECONDS.between(oldDate, newDate); long milis = ChronoUnit.MILLIS.between(oldDate, newDate); long nano = ChronoUnit.NANOS.between(oldDate, newDate); System.out.println("\n--- Total --- "); System.out.println(years + " years"); System.out.println(months + " months"); System.out.println(weeks + " weeks"); System.out.println(days + " days"); System.out.println(hours + " hours"); System.out.println(minutes + " minutes"); System.out.println(seconds + " seconds"); System.out.println(milis + " milis"); System.out.println(nano + " nano"); } }
Выход
1982-08-31T10:20:55 2016-11-09T10:21:56 --- Total --- 34 years 410 months 1784 weeks 12489 days 299736 hours 17984161 minutes 1079049661 seconds 1079049661000 milis 1079049661000000000 nano