У нас есть класс классов TimeSpan в Java
Мне просто интересно, нужна ли 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, но еще не обнаружено мной.
Ответы
Ответ 1
Interval
от JodaTime будет делать.
Временной интервал представляет собой период время между двумя моментами. Интервалы включают в себя начальный момент и исключая конец. Конечный момент всегда больше или равно начать мгновенно.
Интервалы имеют фиксированную миллисекунду продолжительность. В этом разница между начальными и конечными моментами. Продолжительность отображается отдельно по ReadableDuration. В результате, интервалы не сопоставимы. к сравните длину двух интервалов, вы должны сравнить их продолжительность.
Интервал также может быть преобразован в ReadablePeriod. Это разница между началом и концом точек с точки зрения таких полей, как лет и дней.
Интервал является потокобезопасным и неизменным.
Ответ 2
В Java 8 в стандартный API добавлена правильная библиотека времени (это в значительной степени основано на JodaTime).
В нем есть два класса, которые вы можете использовать для указания периода:
-
Duration
, который указывает продолжительность секунды или наносекунды времени.
-
Period
, который указывает на более удобную для пользователя разницу, хранящуюся как "х лет и месяцев и т.д.".
Подробное объяснение различий между ними можно найти в учебном пособии
Ответ 3
Если вы ищете альтернативную более легкую версию, посмотрите на эту библиотеку, которую я написал, чтобы использовать ее в своем приложении для Android. https://github.com/ashokgelal/samaya
Извините, у меня нет документации по ее использованию, но она очень похожа на аналогичный класс .net Timespan. Кроме того, есть несколько модульных тестов, которые содержат много примеров того, как его использовать.
Ответ 4
Если вы используете Java 8 (или выше) или просто не хотите импортировать JodaTime (сам автор JodaTime предлагать перенос в java.time ): Java 8 предлагает эту функциональность с Periods, см. Здесь учебник: 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)