Класс Clock
- Все реализуемые интерфейсы:
InstantSource
public abstract class Clock extends Object implements InstantSource
Экземпляры этого абстрактного класса используются для доступа к подключаемой представлению текущего момента времени, которое можно интерпретировать, используя хранимый часовой пояс, чтобы найти текущую дату и время. Например, Clock можно использовать вместо System.currentTimeMillis() и TimeZone.getDefault().
Использование Clock является необязательным. Все ключевые классы работы с датой и временем также имеют фабричный метод now() , который использует системные часы в часовом поясе по умолчанию. Основная цель этой абстракции — позволить подключать альтернативные часы по мере необходимости. Приложения используют объект для получения текущего времени, а не статический метод. Это упрощает тестирование.
Таким образом, этот абстрактный класс не гарантирует, что результат фактически представляет текущий момент времени на временной шкале. Вместо этого он позволяет приложению предоставить контролируемый вид текущего момента времени и часового пояса.
Лучшей практикой для приложений является передача Clock в любой метод, который требует текущего момента времени и часового пояса. Фреймворк инъекции зависимостей — один из способов достижения этой цели:
public class MyBean {
private Clock clock; // dependency inject
...
public void process(LocalDate eventDate) {
if (eventDate.isBefore(LocalDate.now(clock)) {
...
}
}
}
Этот подход позволяет использовать альтернативные часы, такие как fixed или offset во время тестирования. Фабричные методы system предоставляют часы, основанные на наилучших доступных системных часах. Это может использовать System.currentTimeMillis() или часы с более высокой точностью, если они доступны.
- Требования к реализации:
- Этот абстрактный класс должен быть реализован с осторожностью, чтобы обеспечить правильную работу других классов. Все реализации должны быть потокобезопасными — один экземпляр должен быть способен вызываться из нескольких потоков без негативных последствий, таких как гонки.
Основные методы определены для возможности выбрасывания исключения. В обычном использовании исключения не будут выбрасываться, однако одной возможной реализацией было бы получение времени из центрального сервера времени через сеть. Очевидно, что в этом случае поиск может завершиться неудачей, и поэтому метод может выбрасывать исключение.
Возвращаемые мгновения от
Clockработают по временной шкале, которая игнорирует високосные секунды, как описано вInstant. Если реализация оборачивает источник, предоставляющий информацию о високосных секундах, то должен использоваться механизм для «сглаживания» високосной секунды. Временная шкала Java требует использования UTC-SLS, однако реализации часов могут выбирать, насколько точными они будут с временной шкалой, при условии, что они документируют, как они работают. Таким образом, реализации не обязаны фактически выполнять разгон UTC-SLS или каким-либо иным образом учитывать високосные секунды.Реализации должны реализовывать
Serializableпо возможности и должны документировать, поддерживают ли они сериализацию. - С:
- 1.8
- См. также:
Краткое описание конструкторов
| Модификатор | Конструктор | Описание |
|---|---|---|
protected |
Конструктор, доступный для подклассов. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
boolean |
equals |
Проверяет, равны ли эти часы другим часам. |
static Clock |
fixed |
Получает часы, которые всегда возвращают один и тот же момент времени. |
abstract ZoneId |
getZone() |
Получает часовой пояс, используемый для создания дат и времени. |
int |
hashCode() |
Хеш-код для этих часов. |
abstract Instant |
instant() |
Получает текущий момент времени часов. |
long |
millis() |
Получает текущий момент времени в миллисекундах часов. |
static Clock |
offset |
Получает часы, которые возвращают моменты времени из указанных часов с добавленной продолжительностью. |
static Clock |
system |
Получает часы, которые возвращают текущий момент времени, используя лучшие доступные системные часы. |
static Clock |
systemDefaultZone() |
Получает часы, которые возвращают текущий момент времени, используя лучшие доступные системные часы, преобразуя дату и время с использованием часового пояса по умолчанию. |
static Clock |
systemUTC() |
Получает часы, которые возвращают текущий момент времени, используя лучшие доступные системные часы, преобразуя дату и время с использованием часового пояса UTC. |
static Clock |
tick |
Получает часы, которые возвращают моменты времени из указанных часов, усеченные до ближайшего значения, кратного указанной продолжительности. |
static Clock |
tickMillis |
Получает часы, которые возвращают текущий момент времени, отсчитываемый в целых миллисекундах, используя лучшие доступные системные часы. |
static Clock |
tickMinutes |
Получает часы, которые возвращают текущий момент времени, отсчитываемый в целых минутах, используя лучшие доступные системные часы. |
static Clock |
tickSeconds |
Получает часы, которые возвращают текущий момент времени, отсчитываемый в целых секундах, используя лучшие доступные системные часы. |
abstract Clock |
withZone |
Возвращает копию этих часов с другим часовым поясом. |
Подробное описание конструкторов
Clock
protected Clock()
Подробное описание методов
systemUTC
public static Clock systemUTC()
Эти часы, а не systemDefaultZone(), следует использовать, когда вам нужен текущий момент времени без даты или времени.
Эти часы основаны на наилучших доступных системных часах. Они могут использовать System.currentTimeMillis(), или часы с более высокой точностью, если они доступны.
Преобразование из момента времени в дату или время использует часовой пояс UTC.
Возвращаемая реализация неизменяема, потокобезопасна и Serializable. Она эквивалентна system(ZoneOffset.UTC).
- Возвращает:
- часы, использующие наилучшие доступные системные часы в часовом поясе UTC, не null
systemDefaultZone
public static Clock systemDefaultZone()
Эти часы основаны на наилучших доступных системных часах. Они могут использовать System.currentTimeMillis(), или часы с более высокой точностью, если они доступны.
Использование этого метода жестко связывает зависимость от часового пояса по умолчанию в вашем приложении. Рекомендуется избегать этого и использовать конкретный часовой пояс всякий раз, когда это возможно. Часы UTC clock следует использовать, когда вам нужен текущий момент времени без даты или времени.
Возвращаемая реализация неизменяема, потокобезопасна и Serializable. Она эквивалентна system(ZoneId.systemDefault()).
- Возвращает:
- часы, использующие наилучшие доступные системные часы в часовом поясе по умолчанию, не null
- См. также:
system
public static Clock system(ZoneId zone)
Эти часы основаны на наилучших доступных системных часах. Они могут использовать System.currentTimeMillis(), или часы с более высокой точностью, если они доступны.
Преобразование из момента времени в дату или время использует указанный часовой пояс.
Возвращаемая реализация неизменяема, потокобезопасна и Serializable.
- Параметры:
-
zone- часовой пояс, используемый для преобразования момента времени в дату и время, не null - Возвращает:
- часы, использующие наилучшие доступные системные часы в указанном часовом поясе, не null
tickMillis
public static Clock tickMillis(ZoneId zone)
У этих часов поле наносекунд всегда будет усечено до миллисекунд. Это гарантирует, что видимые отметки времени будут в целых миллисекундах. Базовые часы — наилучшие доступные системные часы, эквивалентные использованию system(ZoneId).
Реализации могут использовать стратегию кэширования для повышения производительности. Поэтому возможно, что начало миллисекунды, наблюдаемой с помощью этих часов, будет позже, чем наблюдаемое непосредственно с помощью базовых часов.
Возвращаемая реализация неизменяема, потокобезопасна и Serializable. Она эквивалентна tick(system(zone), Duration.ofMillis(1)).
- Параметры:
-
zone- часовой пояс, используемый для преобразования момента времени в дату и время, не null - Возвращает:
- часы, которые отсчитывают в целых миллисекундах с использованием указанного часового пояса, не null
- С:
- 9
tickSeconds
public static Clock tickSeconds(ZoneId zone)
У этих часов поле наносекунд всегда будет равно нулю. Это гарантирует, что видимые отметки времени будут в целых секундах. Базовые часы — наилучшие доступные системные часы, эквивалентные использованию system(ZoneId).
Реализации могут использовать стратегию кэширования для повышения производительности. Поэтому возможно, что начало секунды, наблюдаемой с помощью этих часов, будет позже, чем наблюдаемое непосредственно с помощью базовых часов.
Возвращаемая реализация неизменяема, потокобезопасна и Serializable. Она эквивалентна tick(system(zone), Duration.ofSeconds(1)).
- Параметры:
-
zone- часовой пояс, используемый для преобразования момента времени в дату и время, не null - Возвращает:
- часы, которые отсчитывают в целых секундах с использованием указанного часового пояса, не null
tickMinutes
public static Clock tickMinutes(ZoneId zone)
У этих часов поля наносекунд и секунд минуты всегда будут равны нулю. Это гарантирует, что видимые отметки времени будут в целых минутах. Базовые часы — наилучшие доступные системные часы, эквивалентные использованию system(ZoneId).
Реализации могут использовать стратегию кэширования для повышения производительности. Поэтому возможно, что начало минуты, наблюдаемой с помощью этих часов, будет позже, чем наблюдаемое непосредственно с помощью базовых часов.
Возвращаемая реализация неизменяема, потокобезопасна и Serializable. Она эквивалентна tick(system(zone), Duration.ofMinutes(1)).
- Параметры:
-
zone- часовой пояс, используемый для преобразования момента времени в дату и время, не null - Возвращает:
- часы, которые отсчитывают в целых минутах с использованием указанного часового пояса, не null
tick
public static Clock tick(Clock baseClock, Duration tickDuration)
Эти часы будут тикать только в соответствии с указанной длительностью. Таким образом, если длительность составляет половину секунды, часы будут возвращать моменты времени, усечённые до ближайшей половины секунды.
Длительность тиков должна быть положительной. Если она имеет часть меньше целой миллисекунды, то целая длительность должна делиться на одну секунду без остатка. Все нормальные длительности тиков соответствуют этим критериям, включая любые кратные часы, минуты, секунды и миллисекунды, и разумные длительности в наносекундах, такие как 20нс, 250 000нс и 500 000нс.
Длительность нуль или одна наносекунда не повлияют на усечение. Передача одного из этих значений вернёт базовые часы.
Реализации могут использовать стратегию кэширования для повышения производительности. Поэтому возможно, что начало запрошенной длительности, наблюдаемой с помощью этих часов, будет позже, чем наблюдаемое непосредственно с помощью базовых часов.
Возвращаемая реализация неизменяема, потокобезопасна и Serializable при условии, что базовые часы являются таковыми.
- Параметры:
-
baseClock- базовые часы, на которых основаны часы с отсчетом, не null -
tickDuration- длительность каждого видимого тика, не отрицательная, не null - Возвращает:
- часы, которые отсчитывают в целых единицах длительности, не null
- Исключения:
-
IllegalArgumentException- если длительность отрицательная, или имеет часть меньше целой миллисекунды, что приводит к неделимости всей длительности на одну секунду -
ArithmeticException- если длительность слишком велика для представления в наносекундах
fixed
public static Clock fixed(Instant fixedInstant, ZoneId zone)
Эти часы просто возвращают указанный момент времени. Поэтому это не часы в традиционном понимании. Основное применение — тестирование, где фиксированные часы обеспечивают, что тесты не зависят от текущих часов.
Возвращаемая реализация неизменяема, потокобезопасна и Serializable.
- Параметры:
-
fixedInstant- момент времени, используемый как часы, не null -
zone- часовой пояс, используемый для преобразования момента времени в дату и время, не null - Возвращает:
- часы, которые всегда возвращают тот же момент времени, не null
offset
public static Clock offset(Clock baseClock, Duration offsetDuration)
Эти часы оборачивают другие часы, возвращая моменты времени, которые позже на указанную длительность. Если длительность отрицательная, моменты времени будут раньше текущего момента. Основное применение — моделирование работы в будущем или прошлом.
Длительность нуль не повлияет на смещение. Передача нуля вернёт базовые часы.
Возвращаемая реализация неизменяема, потокобезопасна и Serializable при условии, что базовые часы являются таковыми.
- Параметры:
-
baseClock- базовые часы, к которым добавляется длительность, не null -
offsetDuration- длительность для добавления, не null - Возвращает:
- часы, основанные на базовых часах с добавленной длительностью, не null
getZone
public abstract ZoneId getZone()
Часы обычно получают текущий момент времени, а затем преобразуют его в дату или время с использованием часового пояса. Этот метод возвращает используемый часовой пояс.
- Возвращает:
- используемый часовой пояс для интерпретации моментов времени, не null
withZone
public abstract Clock withZone(ZoneId zone)
Часы обычно получают текущий момент времени, а затем преобразуют его в дату или время с использованием часового пояса. Этот метод возвращает часы с похожими свойствами, но с другим часовым поясом.
- Определено в:
-
withZoneв интерфейсеInstantSource - Параметры:
-
zone- часовой пояс, на который нужно переключиться, не null - Возвращает:
- часы, основанные на этих часах с указанным часовым поясом, не null
millis
public long millis()
Возвращает момент времени, измеренный в миллисекундах, начиная с 1970-01-01T00:00Z (UTC). Это эквивалентно определению System.currentTimeMillis().
Большинству приложений следует избегать этого метода и использовать Instant для представления момента времени на временной шкале, а не простое значение в миллисекундах. Этот метод предоставляется для использования часов в высокопроизводительных сценариях, где создание объекта недопустимо.
Текущая реализация по умолчанию вызывает instant().
- Specified by:
-
millisв интерфейсеInstantSource - Returns:
- текущий момент времени в миллисекундах от эпохи Java 1970-01-01T00:00Z (UTC), не null
- Throws:
-
DateTimeException- если момент времени получить невозможно, не выбрасывается большинством реализаций
instant
public abstract Instant instant()
Возвращает момент времени, представляющий текущий момент времени, как определено часами.
- Specified by:
-
instantв интерфейсеInstantSource - Returns:
- текущий момент времени из этих часов, не null
- Throws:
-
DateTimeException- если момент времени получить невозможно, не выбрасывается большинством реализаций
equals
public boolean equals(Object obj)
Часы должны переопределять этот метод для сравнения равенства на основе своего состояния и для соблюдения контракта Object.equals(java.lang.Object). Если не переопределён, поведение определяется Object.equals(java.lang.Object)
- Overrides:
-
equalsв классеObject - Parameters:
-
obj- объект для проверки, null возвращает false - Returns:
- true, если эти часы равны другим часам
- See Also:
hashCode
public int hashCode()
Часы должны переопределять этот метод на основе своего состояния и для соблюдения контракта Object.hashCode(). Если не переопределён, поведение определяется Object.hashCode()
- Overrides:
-
hashCodeв классеObject - Returns:
- подходящий хеш-код
- See Also:
© 1993, 2021, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/time/Clock.html