JAVA конвертирует минуты в время по умолчанию [чч: мм: сс]

1

что является самым простым и быстрым способом конвертировать минуты (двойной) в стандартное время hh: mm: ss

например, я использовал этот код в python, и он работает

time = timedelta (минуты = 250,0) Время печати

результат: 4:10:00

есть ли java-библиотека или простой код?

  • 0
    Что вы подразумеваете под «временем по умолчанию»? Что здесь по умолчанию? Звучит так, как будто вы имеете в виду «для текстового формата чч: мм: сс».
  • 0
    В случае, если у вас есть двойник, у вас также есть Date SimpleDateFormat sdf = new SimpleDateFormat("HH:mm.ss.S"); String timestamp = sdf.format(myDate.getTime());
Показать ещё 5 комментариев
Теги:
time
default

3 ответа

0
Лучший ответ

EDIT: чтобы показать секунды как SS, вы можете сделать простую пользовательскую переменную форматирования для передачи String.format()

EDIT: добавлена логика для добавления одной минуты и пересчета seconds если начальное двойное значение имеет числовое значение после десятичного разделителя больше 59.

EDIT: заметная потеря точности при выполнении математики на двойной (радость работы с удвоениями!) seconds, поэтому время от времени это не будет правильным значением. Изменен код для правильного расчета и округления его. Также добавлена логика для рассмотрения случаев, когда переходы минут и часов из-за каскадирования с секунд.

Попробуйте (не нужны внешние библиотеки)

public static void main(String[] args) {
    final double t = 1304.00d;

    if (t > 1440.00d) //possible loss of precision again
        return;

    int hours = (int)t / 60;
    int minutes = (int)t % 60;
    BigDecimal secondsPrecision = new BigDecimal((t - Math.floor(t)) * 100).setScale(2, RoundingMode.HALF_UP);
    int seconds = secondsPrecision.intValue();

    boolean nextDay = false;

    if (seconds > 59) {
        minutes++; //increment minutes by one
        seconds = seconds - 60; //recalculate seconds
    }

    if (minutes > 59) {
        hours++;
        minutes = minutes - 60;
    }

    //next day
    if (hours > 23) {
        hours = hours - 24;
        nextDay = true;
    }

    //if seconds >=10 use the same format as before else pad one zero before the seconds
    final String myFormat = seconds >= 10 ? "%d:%02d:%d" : "%d:%02d:0%d";
    final String time = String.format(myFormat, hours, minutes, seconds);
    System.out.print(time);
    System.out.println(" " + (nextDay ? "The next day" : "Current day"));
}

Конечно, это может продолжаться и продолжаться, расширяя этот алгоритм, чтобы обобщить его. Пока это будет работать до следующего дня, но не дальше, поэтому мы можем ограничить первоначальное значение двойным значением.

 if (t > 1440.00d)
        return;
  • 0
    верный! легко и просто, еще одна вещь, секунды отображаются как S, как я могу изменить его на SS (например: с 8 до 08), большое спасибо
  • 0
    обновленный ответ для удовлетворения ваших потребностей
Показать ещё 4 комментария
0
//Accept minutes from user and return time in HH:MM:SS format

    private String convertTime(long time)
{
        String finalTime = "";
        long hour = (time%(24*60)) / 60;
        long minutes = (time%(24*60)) % 60;
        long seconds = time / (24*3600);

        finalTime = String.format("%02d:%02d:%02d",
                TimeUnit.HOURS.toHours(hour) ,
                TimeUnit.MINUTES.toMinutes(minutes),
                TimeUnit.SECONDS.toSeconds(seconds));
        return finalTime;
    }
0

Используя Joda, вы можете сделать что-то вроде:

import org.joda.time.Period;
import org.joda.time.format.PeriodFormatter;
import org.joda.time.format.PeriodFormatterBuilder;


    final Period a = Period.seconds(25635);
    final PeriodFormatter hoursMinutes = new PeriodFormatterBuilder().appendHours().appendSuffix(" hour", " hours")
            .appendSeparator(" and ").appendMinutes().appendSuffix(" minute", " minutes").appendSeparator(" and ")
            .appendSeconds().appendSuffix(" second", " seconds").toFormatter();
    System.out.println(hoursMinutes.print(a.normalizedStandard()));
  • 0
    не работает, чтобы получить чч: мм: сс, но это дает мне (часы: XX, минуты: XX) спасибо
  • 0
    @ user2564147 теперь я тоже должен печатать секунды.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню