Содержание
Класс Duration служит для хранения продолжительности времени на основе секунд и наносекунд. Также для отображения длительности можно использовать и другие величины, вроде минут, часов, дней. Однако, основное предназначение этого класса - представление небольших промежутов времени. Для работы с длительными промежутками времени предназначен другой класс - Period.
Обратите внимание, что при вычислении продолжительности не учитывается переход на летнее/зимнее время.
Максимальное значение продолжительности равняется максимальному значению типа Long в секундах. Т.е., 2^63-1 секунд или ~3 * 10^11 лет! Это больше, чем предполагаемый возраст вселенной.
Секунды и наносекунды хранятся отдельно. Как было сказано выше, секунды хранятся в переменной типа long, наносекунды - в переменной типа int. Причем сохраняются только наносекунды от секунды и всегда в пределах от 0 до 999 999 999.
Рассмотрим пример создания экземпляров Duration с использованием статических методов:
import java.time.Duration;
import java.time.LocalDateTime;
import java.time.Month;
public class Main {
public static void main(String[] args) {
LocalDateTime from = LocalDateTime.of(2014, Month.JULY, 9, 12, 00);
LocalDateTime to = LocalDateTime.of(2014, Month.JULY, 9, 13, 00);
Duration duration = Duration.between(from, to);
System.out.println("duration: " + duration.toMinutes());
}
}
// output
// duration: 3600000
Метод | Описание |
---|---|
between(Temporal startInclusive, Temporal endExclusive) | |
from(TemporalAmount amount) | |
of(long amount, TemporalUnit unit) | |
ofDays(long days) | |
ofHours(long hours) | |
ofMillis(long millis) | |
ofMinutes(long minutes) | |
ofNanos(long nanos) | |
ofSeconds(long seconds) | |
ofSeconds(long seconds, long nanoAdjustment) | |
parse(CharSequence text) |
Рассмотрим подробнее метод parse. Этот метод преобразовует текстовое представление продолжительности вида PnDTnHnMn.nS в объект Duration. Строка начинается с опционального символа '+' или '-'. Затем следует символ 'P' в нижнем или верхнем регистре. Далее могут быть 4 секции, каждая из которых содержит число и суффикс. Суффиксами могут быть следующие символы 'D', 'H', 'M' и 'S' для дней, часов, минут и секунд соответственно. При этом не важно в нижнем или верхнем регистре. Символ 'T' (time, время) должен быть перед первым появлением секции часов, минут или секунд (символы 'H', 'M' и 'S'). После символа 'T' должна быть минимум одна секция. Например:
import java.time.Duration;
public class Main {
public static void main(String[] args) {
System.out.println("1: " + Duration.parse( "+PT20.345S" ));
System.out.println("2: " + Duration.parse( "PT20.345S" ));
System.out.println("3: " + Duration.parse( "PT15M" ));
System.out.println("4: " + Duration.parse( "PT10H" ));
System.out.println("5: " + Duration.parse( "P2D" ));
System.out.println("6: " + Duration.parse( "P2DT3H4M" ));
System.out.println("7: " + Duration.parse( "PT-6H3M" ));
System.out.println("8: " + Duration.parse( "-PT6H3M" ));
System.out.println("9: " + Duration.parse( "-PT-6H+3M" ));
System.out.println("9: " + Duration.parse( "P-2DT-6H3M" ));
}
}
// output
// 1: PT20.345S
// 2: PT20.345S
// 3: PT15M
// 4: PT10H
// 5: PT48H
// 6: PT51H4M
// 7: PT-5H-57M
// 8: PT-6H-3M
// 9: PT5H57M
// 9: PT-53H-57M
Как видно из примера, продолжительность также может быть негативной. Для преобразования даты к позитивному виду используйте метод abs(), для проверки или дата является негативной - метод isNegative(), а для преобразования даты к негативному виду - метод negated():
import java.time.Duration;
public class Main {
public static void main(String[] args) {
Duration minusTwoDays = Duration.ofDays( -2 );
System.out.println("minusTwoDays: " + minusTwoDays);
if( minusTwoDays.isNegative() ){
Duration twoDays = minusTwoDays.abs();
System.out.println("twoDays: " + twoDays);
System.out.println("minusTwoDays: " + twoDays.negated());
}
}
}
// output:
// minusTwoDays: PT-48H
// twoDays: PT48H
// minusTwoDays: PT-48H
Ниже представлены примеры использования методов of*
import java.time.Duration;
public class Main {
public static void main(String[] args) {
System.out.println("ofDays: " + Duration.ofDays( 2 ));
System.out.println("ofHours: " + Duration.ofHours( 4 ));
System.out.println("ofMinutes: " + Duration.ofMinutes( 3 ));
System.out.println("ofSeconds: " + Duration.ofSeconds( 14 ));
System.out.println("ofSeconds2: " + Duration.ofSeconds( 14, 1500050 ));
System.out.println("ofMillis: " + Duration.ofMillis( 150 ));
System.out.println("ofNanos: " + Duration.ofNanos( 35005 ));
}
}
// output:
// ofDays: PT48H
// ofHours: PT4H
// ofMinutes: PT3M
// ofSeconds: PT14S
// ofSeconds2: PT14.00150005S
// ofMillis: PT0.15S
// ofNanos: PT0.000035005S
Ниже представлены методы, с помощью которых можно получить значения продолжительности в разных величинах:
Метод | Описание |
---|---|
getNano() | |
getSeconds() | |
toDays() | |
toHours() | |
toMinutes() | |
toMillis() | |
toNanos() |
Ниже примеры, демонстрирующие все методы:
import java.time.Duration;
public class Main {
public static void main(String[] args) {
Duration twoDays = Duration.ofDays( 2 );
System.out.println("toDays: " + twoDays.toDays());
System.out.println("toHours: " + twoDays.toHours());
System.out.println("toMinutes: " + twoDays.toMinutes());
System.out.println("getSeconds: " + twoDays.getSeconds());
System.out.println("toMillis: " + twoDays.toMillis());
System.out.println("toNanos: " + twoDays.toNanos());
System.out.println("getNano: " + twoDays.getNano());
}
}
// output:
// toDays: 2
// toHours: 48
// toMinutes: 2880
// getSeconds: 172800
// toMillis: 172800000
// toNanos: 172800000000000
// getNano: 0
Как и в случае с классом LocalDateTime, в классе Duration существуют удобные методы для изменения продолжительности: plus*, minus* и with*:
Метод | Описание |
---|---|
minus(Duration duration) | |
minusDays(long daysToSubtract) | |
minusHours(long hoursToSubtract) | |
minusMinutes(long minutesToSubtract) | |
minusSeconds(long secondsToSubtract) | |
minusMillis(long millisToSubtract) | |
minusNanos(long nanosToSubtract) | |
plus(Duration duration) | |
plusDays(long daysToAdd) | |
plusHours(long hoursToAdd) | |
plusMinutes(long minutesToAdd) | |
plusSeconds(long secondsToAdd) | |
plusMillis(long millisToAdd) | |
plusNanos(long nanosToAdd) | |
multipliedBy(long multiplicand) | |
dividedBy(long divisor) | |
withNanos(int nanoOfSecond) | |
withSeconds(long seconds) |
Эти методы возвращают объект Duration, поэтому можно выполнять последовательность действий. Например:
import java.time.Duration;
public class Main {
public static void main(String[] args) {
Duration duration = Duration
.parse( "P21DT5H15M45.150S" )
.plusNanos( 150 )
.plusDays(2)
.minusMinutes(15)
.dividedBy(2);
System.out.println("duration: " + duration);
}
}
// output:
// duration: PT278H30M22.575000075S
< | Дата и время в Java 8. Сравнение даты и времени |
3 мая 2023 г. 9:20
|
Веб-страница оптимизация для поисковых систем, таких как google и yahoo (Поисковый маркетинг). Интернет-сайт оптимизация для поисковых систем, таких как google и yahoo может быть набором мер направленных на увеличение рейтинга интернет-сайта в serps. Важная вещь вещи, на которые следует остерегаться в Поисковый маркетинг являются соответствующими использованием ключевых слов и фразы, заголовки и метаописания, улучшение веб-сайт загрузка скорость и гарантия человек знания хотя используя интернет-сайт.
интернет маркетинг микроблог 8a3dac6 p@11=3k |