Класс Clock
- java.lang.Object
-
- java.time.Clock
public abstract class Clock extends Object
Часы, предоставляющие доступ к текущему мгновению, дате и времени с использованием часового пояса.
Экземпляры этого класса используются для определения текущего мгновения, которое может быть интерпретировано с использованием хранящегося часового пояса для определения текущей даты и времени. Таким образом, часы могут использоваться вместо 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 Time-Scale предписывает использование UTC-SLS, однако реализации часов могут выбирать, насколько точны они со шкалой времени, при условии, что они документируют, как они работают. Поэтому реализации не обязаны фактически выполнять сдвиг UTC-SLS или каким-либо другим образом учитывать високосные секунды.Реализации должны реализовывать
Serializableпо возможности и должны документировать, поддерживают ли они сериализацию. - Примечание по реализации:
- Реализация часов, предоставленная здесь, основана на тех же базовых часах, что и
System.currentTimeMillis(), но может иметь точность, более высокую чем миллисекунды, если доступна. Однако, никакой гарантии не предоставляется относительно точности базовых часов. Приложения, требующие более точных часов, должны реализовать этот абстрактный класс самостоятельно, используя другие внешние часы, такие как сервер NTP. - С тех пор:
- 1.8
Конструкторы
| Модификатор | Конструктор | Описание |
|---|---|---|
protected | Clock() | Конструктор, доступный для подклассов. |
Методы
| Модификатор и тип | Метод | Описание |
|---|---|---|
boolean | equals(Object obj) | Проверяет, равны ли эти часы другим часам. |
static Clock | fixed(Instant fixedInstant,
ZoneId zone) | Получает часы, которые всегда возвращают одно и то же мгновение. |
abstract ZoneId | getZone() | Получает часовой пояс, используемый для создания дат и времени. |
int | hashCode() | Хэш-код для этих часов. |
abstract Instant | instant() | Получает текущее мгновение часов. |
long | millis() | Получает текущее мгновение часов в миллисекундах. |
static Clock | offset(Clock baseClock,
Duration offsetDuration) | Получает часы, возвращающие мгновения от указанных часов с добавлением указанной длительности. |
static Clock | system(ZoneId zone) | Получает часы, возвращающие текущее мгновение, используя лучшие доступные системные часы. |
static Clock | systemDefaultZone() | Получает часы, возвращающие текущее мгновение, используя лучшие доступные системные часы, преобразуя дату и время в соответствии с часовым поясом по умолчанию. |
static Clock | systemUTC() | Получает часы, возвращающие текущее мгновение, используя лучшие доступные системные часы, преобразуя дату и время в соответствии с UTC часовым поясом. |
static Clock | tick(Clock baseClock,
Duration tickDuration) | Получает часы, возвращающие мгновения от указанных часов, усеченные до ближайшего кратного указанной длительности. |
static Clock | tickMillis(ZoneId zone) | Получает часы, возвращающие текущее мгновение, отсчитывая по целым миллисекундам, используя лучшие доступные системные часы. |
static Clock | tickMinutes(ZoneId zone) | Получает часы, возвращающие текущее мгновение, отсчитывая по целым минутам, используя лучшие доступные системные часы. |
static Clock | tickSeconds(ZoneId zone) | Получает часы, возвращающие текущее мгновение, отсчитывая по целым секундам, используя лучшие доступные системные часы. |
abstract Clock | withZone(ZoneId zone) | Возвращает копию этих часов с другим часовым поясом. |
Методы, объявленные в классе java.lang.Object
clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait Конструкторы
Clock
protected Clock()
Конструктор, доступный для подклассов.
Методы
systemUTC
public static Clock systemUTC()
Получает часы, которые возвращают текущий момент времени, используя лучшие доступные системные часы, преобразуя их в дату и время с использованием часового пояса UTC.
Эти часы, а не systemDefaultZone(), следует использовать, когда вам нужен текущий момент времени без даты и времени.
Эти часы основаны на лучших доступных системных часах. Они могут использовать System.currentTimeMillis() или часы с более высоким разрешением, если они доступны.
Преобразование момента во временную метку или дату использует часовой пояс UTC.
Возвращаемая реализация неизменяема, потокобезопасна и Serializable. Она эквивалентна system(ZoneOffset.UTC).
- Возвращает:
- часы, использующие лучшие доступные системные часы в часовом поясе UTC, не null
systemDefaultZone
public static Clock systemDefaultZone()
Получает часы, которые возвращают текущий момент времени, используя лучшие доступные системные часы, преобразуя их в дату и время с использованием часового пояса по умолчанию.
Эти часы основаны на лучших доступных системных часах. Они могут использовать System.currentTimeMillis() или часы с более высоким разрешением, если они доступны.
Использование этого метода жестко задает зависимость от часового пояса по умолчанию в вашем приложении. Рекомендуется избегать этого и использовать конкретный часовой пояс всякий раз, когда это возможно. UTC clock следует использовать, когда вам нужен текущий момент времени без даты и времени.
Возвращаемая реализация неизменяема, потокобезопасна и Serializable. Она эквивалентна system(ZoneId.systemDefault()).
- Возвращает:
- часы, использующие лучшие доступные системные часы в часовом поясе по умолчанию, не null
- См. также:
ZoneId.systemDefault()
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)
Возвращает копию этих часов с другим часовым поясом.
Часы обычно получают текущий момент, а затем преобразуют его в дату или время, используя часовой пояс. Этот метод возвращает часы с аналогичными свойствами, но с другим часовым поясом.
- Параметры:
-
zone- часовой пояс для изменения, не null - Возвращает:
- часы, основанные на этих часах с указанным часовым поясом, не null
millis
public long millis()
Получает текущий момент в миллисекундах от часов.
Возвращает мгновение времени в миллисекундах, отсчитываемое с 1970-01-01T00:00Z (UTC). Эквивалентно определению System.currentTimeMillis().
Большинству приложений следует избегать этого метода и использовать Instant для представления момента на временной шкале, а не значения миллисекунд. Этот метод предоставлен для использования часов в высокопроизводительных случаях, где создание объекта неприемлемо.
Текущая реализация по умолчанию вызывает instant().
- Возвращает:
- текущий момент в миллисекундах от этих часов, измеренный с эпохи Java 1970-01-01T00:00Z (UTC), не null
- Исключения:
-
DateTimeException- если момент времени не может быть получен, не выбрасывается большинством реализаций
instant
public abstract Instant instant()
Получает текущий момент времени по часам.
Возвращает момент времени, представляющий текущий момент, как определено часами.
- Возвращает:
- текущий момент времени от этих часов, не null
- Исключение:
-
DateTimeException- если момент времени получить невозможно, не выбрасывается большинством реализаций
equals
public boolean equals(Object obj)
Проверяет, равны ли эти часы другим часам.
Часы должны переопределить этот метод, чтобы сравнивать равенство на основе их состояния и соответствовать контракту Object.equals(java.lang.Object). Если не переопределен, поведение определяется Object.equals(java.lang.Object)
- Переопределяет:
-
equalsв классеObject - Параметры:
-
obj- объект для проверки, null возвращает false - Возвращает:
- true, если эти часы равны другим часам
- См. также:
-
Object.hashCode(),HashMap
hashCode
public int hashCode()
Хэш-код для этих часов.
Часы должны переопределить этот метод, основываясь на их состоянии и для соблюдения контракта Object.hashCode(). Если не переопределен, поведение определяется Object.hashCode()
- Переопределяет:
-
hashCodeв классеObject - Возвращает:
- подходящий хэш-код
- См. также:
-
Object.equals(java.lang.Object),System.identityHashCode(java.lang.Object)
© 1993, 2020, 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/11/docs/api/java.base/java/time/Clock.html