Хобрук: Ваш путь к мастерству в программировании

Проблема Преобразование секунд в ЧЧ:ММ:СС java

У меня есть длинная переменная, которая представляет время простоя приложения в секундах. Я хочу отображать время простоя как HH:mm:ss

Long downTime = 755; 
Date newD = new Date(downTime * 1000);

При передаче длинной переменной в дату я умножил ее на 1000, чтобы получить значение в миллисекундах. Переменная newD оценивается как Thu Jan 01 01:12:35 GMT 1970

Значение newD отличается на 1 час, 755 секунд = 00:12:35.

Я так понимаю, что секунды * 1000 = миллисекунды будут оцениваться как правильный ответ. Как я видел здесь

Если я использую Duration, мы получаем правильный ответ.

Duration d = Duration.ofSeconds(downTime);
PT12M35S

Но форматирование не такое, как я хочу.


  • Посмотрите здесь, как отформатировать продолжительность: stackoverflow.com/questions/266825/. 08.09.2017
  • Ваш текущий код будет работать, если вы находитесь в UTC, ваш местный часовой пояс должен быть на один час впереди UTC. 08.09.2017
  • Кроме того, если у вас есть доступ к классу Duration, это означает, что вы используете Java 8. Поэтому не используйте больше старый класс Date. Используйте классы из пакета java.time. 08.09.2017
  • попробуйте использовать Date newD = new Date(System.currentTimeMillis() + downTime * 1000);, который должен предоставить вам текущее системное время. 08.09.2017
  • Просто говорю, но если вы используете java.time.Duration, по крайней мере, используйте полный пакет java.time, а не java.util.Date. 08.09.2017
  • @procrastinator Вопрос вообще не в текущем времени. Вопрос о взломе формата времени суток для промежутка времени. Кроме того, избегайте устаревших классов. Гораздо проще просто использовать современные классы java.time. LocalTime.MIN.plusSeconds( 755L ).toString() 08.09.2017

Ответы:


1

LocalTime.MIN

LocalTime.MIN.plusSeconds( 755L ) 

Or,

LocalTime.MIN.plus( 
    Duration.ofSeconds( 755L ) 
)

ВНИМАНИЕ: это хак, и я его не рекомендую. Представление промежутка времени как времени дня неоднозначно и сбивает с толку.

По умолчанию LocalTime::toString метод пропускает конечные единицы, если они равны нулю. Чтобы указать все три части (часы, минуты, секунды), используйте DateTimeFormatter.

DateTimeFormatter f = DateTimeFormatter.ofPattern( "HH:mm:ss" ) ;
String output = lt.format( f ) ;

См. этот выполнение кода на сайте IdeOne.com.

00:12:35

ИСО 8601

Я предлагаю, если это возможно, обучать ваших пользователей стандартному формату ISO 8601. Этот формат практичный, понятный и недвусмысленный. Стандартные форматы используются по умолчанию в классах java.time для разбора/генерации строк.

PT12M35S

Или сгенерируйте строку, указывающую количество времени в прозе.

08.09.2017
  • Я согласен, что этот взлом может сбивать с толку. Duration существуют (и известны OP), чтобы представлять продолжительность... используя это решение. 08.09.2017

  • 2

    Проверьте, можете ли вы использовать это:

    long millis = 755000;
    String hms = String.format("%02d:%02d:%02d", 
        TimeUnit.MILLISECONDS.toHours(millis),
        TimeUnit.MILLISECONDS.toMinutes(millis) % TimeUnit.HOURS.toMinutes(1),
        TimeUnit.MILLISECONDS.toSeconds(millis) % TimeUnit.MINUTES.toSeconds(1));
    System.out.println(hms);
    
    08.09.2017

    3

    Вы почти там

    java.time.Duration создан по образцу стандарты ISO-8601 и были представлены с Java-8 как часть реализация JSR-310. В Java-9 появилось несколько дополнительных удобных методов.

    Если вы прошли по приведенным выше ссылкам, вы, возможно, уже заметили, что PT12M35S указывает продолжительность 12 минут 35 секунд. Поскольку у вас уже есть объект Duration, из этого объекта вы можете создать строку, отформатированную в соответствии с вашими требованиями, получив из нее дни, часы, минуты, секунды.

    Демонстрация:

    import java.time.Duration;
    
    public class Main {
        public static void main(String[] args) {
            Long downTime = 755L;
            Duration duration = Duration.ofSeconds(downTime);// PT12M35S
    
            // Default format
            System.out.println(duration);
    
            // Custom format
            // ####################################Java-8####################################
            String formattedElapsedTime = String.format("%02d:%02d:%02d", duration.toHours() % 24,
                    duration.toMinutes() % 60, duration.toSeconds() % 60);
            System.out.println(formattedElapsedTime);
            // ##############################################################################
    
            // ####################################Java-9####################################
            formattedElapsedTime = String.format("%02d:%02d:%02d", duration.toHoursPart(), duration.toMinutesPart(),
                    duration.toSecondsPart());
            System.out.println(formattedElapsedTime);
            // ##############################################################################
        }
    }
    

    Вывод:

    PT12M35S
    00:12:35
    00:12:35
    

    Узнайте о современном API даты и времени из Trail: Date Time.

    Продолжительность и дата - разные понятия

    Ваше требование состоит в том, чтобы рассчитать продолжительность вместо даты и времени. SimpleDateFormat или java.time.format.DateTimeFormatter (часть современного API даты и времени) следует использовать для представления даты/времени/даты-времени, то есть чего-то, что представляет момент времени, а не период/длительность времени. Эмпирическое правило, чтобы запомнить это:

    1. Используйте SimpleDateFormat или java.time.format.DateTimeFormatter для того, что вы называете since в английской грамматике Tense.
    2. Используйте Период и Продолжительность для того, на что вы ссылаетесь с помощью for в Английская грамматика Время.

    Проверьте Разницу между и For – английская грамматика

    01.01.2021
    Новые материалы

    Пять вещей, о которых вы должны ДЕЙСТВИТЕЛЬНО побеспокоиться в связи с ИИ
    Несмотря на то, что циркулирует много неточной информации об ИИ, важно исправить частые заблуждения. Многие могут быть обеспокоены тем, что их в конечном итоге заменят роботом, или..

    Тестирование ответов на вопросы на основе BERT по статьям о коронавирусе
    Введение В настоящее время большая часть мира затронута пандемией COVID-19 . Для многих из нас это означало домашний карантин, социальное дистанцирование, перебои в рабочей среде. Я..

    Библиотеки PyTorch и Python для машинного обучения: приложения в здравоохранении с обнимающим лицом…
    В сфере машинного обучения Python выделяется благодаря своей универсальности и набору предлагаемых библиотек. Развитие машинного обучения в здравоохранении можно частично объяснить простотой и..

    «Что за…» очень хорошо представляет мое выражение лица после того, как я увидел это!
    «Что за…» очень хорошо представляет мое выражение лица после того, как я увидел это!

    5 вещей, которые я сделал, чтобы стать профессиональным разработчиком JavaScript
    Чтобы стать профессиональным JS-разработчиком: 1. Практикуйтесь в рутине, 2. Работайте над проектами, 3. Придерживайтесь одного языка, 4. Наблюдайте за чужим кодом, 5. Будьте последовательны..

    От теории к практике: пошаговое руководство по реализации наивного Байеса
    Вы когда-нибудь застревали в проекте классификации, не зная, как точно предсказать результаты для ваших данных? Вы искали более простой и интуитивно понятный алгоритм, который поможет вам достичь..

    #093 | Моделирование вспышки эпидемии с помощью JavaScript — Часть 3
    TLDR: Я сделал симуляцию вспышки эпидемии, в которую можно поиграть здесь . Мой холст, моя сцена Мой HTML — это всего лишь один div с классом stage, и вот как я настроил на нем свой объект..


    © 2024 hobruk.ru, Хобрук: Ваш путь к мастерству в программировании