#java #oop #time
#java #ооп #время
Вопрос:
Я вообще не пытаюсь использовать текущее время. Я в курсе Java-утилит календаря и даты, но я не уверен, как создать свои СОБСТВЕННЫЕ временные метки, не зависящие от текущего времени. Например, у каждого объекта будет переменная «время прибытия» в формате hh: mm: ss. Но я понятия не имею, как это сделать. Должен ли я создавать свой собственный класс?
Комментарии:
1. Посмотрите на более новый
java.time
API. Ответ на ваш вопрос будет во многом зависеть от того, чего вы хотите достичь. Если вам нужно вычислить разницу между временами или упорядочить их каким-то определенным образом, то вам может быть лучше использоватьjava.time
API, поскольку эта функциональность уже существует2. «Должен ли я создавать свой собственный класс?» Да, по крайней мере, вам понадобится пользовательский фабричный класс для генерации и распределения ваших временных меток. Однако фактические объекты временных меток могут быть либо типа, предоставляемого JDK, например
LocalTime
, либо класса вашего собственного создания, в зависимости от ваших потребностей.
Ответ №1:
Это не совсем понятно, но я бы подумал, что вам нужно что-то вроде этого:
public class MyObject {
private static final DateTimeFormatter ARRIVAL_TIME_FORMATTER
= DateTimeFormatter.ofPattern("HH:mm:ss");
// Some instance variables
private LocalTime arrivalTime;
public MyObject(LocalTime arrivalTime) {
this.arrivalTime = arrivalTime;
}
public String getFormattedArrivalTime() {
return arrivalTime.format(ARRIVAL_TIME_FORMATTER);
}
}
Как было сказано в комментариях, используйте LocalTime
для времени суток. Не беспокойтесь о формате при сохранении времени прибытия в вашем объекте. Форматируйте его только тогда, когда вам нужно его отобразить. LocalTime.of
создает LocalTime
не связанные с текущим временем. Существуют перегруженные версии, которые также занимают секунды.
Так что нет, не создавайте свой собственный класс временных меток. Используйте LocalTime
(или, в зависимости от требований, какой-либо другой класс) из java.time, современного Java date and time API.
Давайте посмотрим краткий пример использования вышеупомянутого MyObject
класса:
MyObject obj = new MyObject(LocalTime.of(23, 45));
System.out.println("Object arrived at " obj.getFormattedArrivalTime());
Вывод:
Объект прибыл в 23:45:00
В выходных данных (и только там) время было отформатировано в hh:mm:ss
соответствии с вашим запросом.
Редактировать: LocalTime
имеет точность в наносекунды. Бэзил Бурк прав в своем комментарии, что если вы знаете, что не хотите хранить более точную информацию, чем целые секунды, входящее значение легко усечь:
public MyObject(LocalTime arrivalTime) {
this.arrivalTime = arrivalTime.truncatedTo(ChronoUnit.SECONDS);
}
С одной стороны, я бы не решился выбрасывать информацию подобным образом, а временные метки, как правило, выигрывают от точности. С другой стороны, это также может сбивать с толку, если ваш объект хранит долю секунды, которую никто никогда не видит. Вам придется решать самостоятельно.
Ссылки
- Руководство по Oracle: дата и время, объясняющее, как использовать java.time.
- Документация по
LocalTime