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

Я вообще не пытаюсь использовать текущее время. Я знаю о java-утилитах календаря и даты, но я не уверен, как создавать свои СОБСТВЕННЫЕ временные метки, не зависящие от текущего времени. Например, каждый объект будет иметь переменную «время прибытия» в формате чч:мм:сс. Но я понятия не имею, как это сделать. Должен ли я создавать свой собственный класс?

Обратите внимание на более новый java.time API. Ответ на ваш вопрос будет во многом зависеть от того, чего вы хотите достичь. Если вам нужно рассчитать разницу между временами или упорядочить их каким-то определенным образом, возможно, вам лучше использовать java.time API, поскольку эта функция уже существует.

MadProgrammer 06.04.2019 03:33
"Я должен создать свой собственный класс?" Да, по крайней мере, вам понадобится собственный фабричный класс для создания и распределения ваших временных меток. Однако фактические объекты временной метки могут быть либо предоставленным JDK типом, например LocalTime, либо созданным вами классом, в зависимости от ваших потребностей.
Kevin Anderson 06.04.2019 03:58
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
41
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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, современного API даты и времени Java.

Давайте посмотрим на краткий пример использования вышеуказанного класса MyObject:

    MyObject obj = new MyObject(LocalTime.of(23, 45));
    System.out.println("Object arrived at " + obj.getFormattedArrivalTime());

Выход:

Object arrived at 23:45:00

В выводе (и только там) время было отформатировано в hh:mm:ss, как вы и просили.

Редактировать:LocalTime имеет точность до наносекунд. Бэзил Бурк прав в своем комментарии, что если вы знаете, что не хотите хранить более точную точность, чем целые секунды, легко обрезать входящее значение:

    public MyObject(LocalTime arrivalTime) {
        this.arrivalTime = arrivalTime.truncatedTo(ChronoUnit.SECONDS);
    }

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

Ссылки

Другие вопросы по теме