У нас есть класс TimeSpan в Java - PullRequest
47 голосов
/ 05 июля 2011

Мне просто интересно, есть ли необходимость в TimeSpan в java.util, чтобы я мог определить, сколько часов, минут и секунд будет между этими двумя моментами.

С этого TimeSpan мы можем иметь интервал времени между двумя временами. как

TimeSpan getTimeSpan( Date before, Date after ){...}

или

long timeSpan = System.currentTimeMillis();
// ... long job
timeSpan = System.currentTimeMillis() - timeSpan;

TimeSpan ts = new TimeSpan(timeSpan);

и с этим TimeSpan мы можем использовать его в SimpleDateFormat.

SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss");
format.format( timsSpan );

Я не уверен, что это уже реализовано в Java, но пока не обнаружено мной.

Ответы [ 4 ]

29 голосов
/ 05 июля 2011

С JDK 8 библиотеки времени и даты в SDK были обогащены, и вы можете использовать

Duration или Period

Interval от JodaTime сделает ..

Временной интервал представляет период время между двумя мгновениями. Интервалы включают момент начала и исключая конца. Момент конца всегда больше или равно мгновенный старт.

Интервалы имеют фиксированную миллисекунду продолжительность. Это разница между начальным и конечным моментами. Продолжительность представляется отдельно по ReadableDuration. В следствии, интервалы несопоставимы. к сравнить длину двух интервалов, Вы должны сравнить их длительности.

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

Интервал является потокобезопасным и неизменным.

26 голосов
/ 22 июня 2015

В Java 8 надлежащая библиотека времени была добавлена ​​к стандартному API (она в значительной степени основана на JodaTime).

В нем есть два класса, которые вы можете использовать для указания периода:

  1. Duration, который указывает длительность времени в секундах или наносекундах.
  2. Period, что указывает на более удобную для пользователя разницу, хранящуюся в виде «x лет и y месяцев и т. Д.».

Подробное объяснение различий между ними можно найти в руководстве по Java

3 голосов
/ 26 апреля 2015

Если вы работаете на Java 8 (или выше) или просто не хотите импортировать JodaTime (сам автор JodaTime предлагает перенести на java.time): Java 8 предлагает эту функциональность с Периоды , см. Здесь для учебника: https://docs.oracle.com/javase/tutorial/datetime/iso/period.html

Позвольте мне процитировать учебник Oracle здесь:

LocalDate today = LocalDate.now();
LocalDate birthday = LocalDate.of(1960, Month.JANUARY, 1);

Period p = Period.between(birthday, today);
long p2 = ChronoUnit.DAYS.between(birthday, today);
System.out.println("You are " + p.getYears() + " years, " + p.getMonths() +
                   " months, and " + p.getDays() +
                   " days old. (" + p2 + " days total)");

Код производит вывод, подобный следующему:

You are 53 years, 4 months, and 29 days old. (19508 days total)
1 голос
/ 11 августа 2011

Если вы ищете альтернативную более легкую версию, взгляните на эту библиотеку, которую я написал для использования в моем собственном приложении для Android. https://github.com/ashokgelal/samaya

Извините, у меня нет документации по его использованию, но он очень похож на класс .net Timespan. Кроме того, есть несколько модульных тестов, которые содержат много примеров того, как его использовать.

...