Создание определенных временных меток для объектов?

#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);
    }
  

С одной стороны, я бы не решился выбрасывать информацию подобным образом, а временные метки, как правило, выигрывают от точности. С другой стороны, это также может сбивать с толку, если ваш объект хранит долю секунды, которую никто никогда не видит. Вам придется решать самостоятельно.

Ссылки