что является самым простым и быстрым способом конвертировать минуты (двойной) в стандартное время hh: mm: ss
например, я использовал этот код в python, и он работает
time = timedelta (минуты = 250,0) Время печати
результат: 4:10:00
есть ли java-библиотека или простой код?
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;
//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;
}
Используя 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()));
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm.ss.S"); String timestamp = sdf.format(myDate.getTime());