Время в секундах до пользовательского формата строки - PullRequest
7 голосов
/ 14 ноября 2011

Я пытаюсь получить двойное значение с секундами для преобразования в пользовательский формат времени.Я пробовал формат SimpleDate, но он не работает ...

У меня есть двойное значение в этом формате: 407.33386569554585 (представляющее 407 секунд и 333 миллисекунды ...).

Мне нужно это в этом формате: HH/MM/SS.MS

Как мне это сделать?

Заранее спасибо!

Ответы [ 4 ]

14 голосов
/ 14 ноября 2011

Умножьте на 1000, затем приведите к long и создайте дату с ним.

Date date = new Date((long)(dubTime*1000));

Здесь вы можете использовать SimpleDateFormat, чтобы создать желаемую строку.

String formattedDate = new SimpleDateFormat("HH/mm/ss.SSS").format(date);
4 голосов
/ 09 ноября 2015

И в стиле Java 8 (если вы хотите избежать предупреждения об устаревании даты):

DateTimeFormatter formatter =
    DateTimeFormatter.ofPattern("HH/mm/ss.SSS").withZone(ZoneId.of("UTC"));
Instant instant = Instant.ofEpochMilli((long)(dubTime*1000));
return formatter.format(instant);
2 голосов
/ 14 ноября 2011

Вот фрагмент кода, который мы используем, который вы можете легко адаптировать.Реализация ниже будет печатать значение как 00days 00h00m00s00ms:

public final static long ONE_MILLISECOND = 1;
public final static long MILLISECONDS_IN_A_SECOND = 1000;

public final static long ONE_SECOND = 1000;
public final static long SECONDS_IN_A_MINUTE = 60;

public final static long ONE_MINUTE = ONE_SECOND * 60;
public final static long MINUTES_IN_AN_HOUR = 60;

public final static long ONE_HOUR = ONE_MINUTE * 60;
public final static long HOURS_IN_A_DAY = 24;
public final static long ONE_DAY = ONE_HOUR * 24;
public final static long DAYS_IN_A_YEAR = 365;

public String formatHMSM(Number n) {


    String res = "";
    if (n != null) {
        long duration = n.longValue();

        duration /= ONE_MILLISECOND;
        int milliseconds = (int) (duration % MILLISECONDS_IN_A_SECOND);
        duration /= ONE_SECOND;
        int seconds = (int) (duration % SECONDS_IN_A_MINUTE);
        duration /= SECONDS_IN_A_MINUTE;
        int minutes = (int) (duration % MINUTES_IN_AN_HOUR);
        duration /= MINUTES_IN_AN_HOUR;
        int hours = (int) (duration % HOURS_IN_A_DAY);
        duration /= HOURS_IN_A_DAY;
        int days = (int) (duration % DAYS_IN_A_YEAR);
        duration /= DAYS_IN_A_YEAR;
        int years = (int) (duration);
        if (days == 0) {
            res = String.format("%02dh%02dm%02ds%03dms", hours, minutes, seconds, milliseconds);
        } else if (years == 0) {
            res = String.format("%ddays %02dh%02dm%02ds%03dms", days, hours, minutes, seconds, milliseconds);
        } else {
            res = String.format("%dyrs %ddays %02dh%02dm%02ds", years, days, hours, minutes, seconds);
        }
    }
    return res;

}
1 голос
/ 10 февраля 2015

Просто добавьте к ответу Тима: чтобы получить правильную строку независимо от вашего часового пояса, просто используйте SimpleDateFormat.setTimeZone():

DateFormat dateFormat = new SimpleDateFormat("HH/mm/ss.SSS");
dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
// ...
double doubleTime=1000.0;
Date date = new Date((long) (doubleTime*1000));
String formattedTime = dateFormat.format(date);

. Обязательно обратитесь к DateFormat.setTimeZone javadoc, чтобы узнать, когда timeZoneможет быть перезаписано.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...