Android: форматирование миллисекунд в ›60 секунд, если формат минут не указан

Я получил значение миллисекунды. Я хочу использовать строку формата, чтобы отформатировать эти миллисекунды в формате времени. например 45000 мс = 45 с или 0 м 45 с или что-то еще. Так что в этом нет ничего особенного. Я использовал для этого SimpleDateFormat, но теперь возникает моя проблема:

61000 мс заканчиваются в 1 м 1 с. Меня это устраивает, ЕСЛИ в строке формата указана минута. Но когда в строке формата не указана минута, она должна выводить 61 с вместо 1 с.

Есть ли простой способ добиться этого? В настоящее время я не вижу этого без какого-либо уродливого кода форматирования строк.

Я надеюсь, что вы можете помочь мне :)

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

Редактировать:

Для лучшего понимания: у вас получилось 65400 миллисекунд.

строка формата содержит минуты, секунды, миллисекунды: 1m 5s 400ms
строка формата содержит минуты и секунды: 1m 5s
строка формата содержит секунды: 65s
строка формата содержит секунды и миллисекунды: 65s 4ms
строка формата содержит минуты и миллисекунды: 1 м 5400 мс


person slaindevil    schedule 04.08.2011    source источник


Ответы (3)


Если я правильно понимаю, вам дается количество миллисекунд и строка формата времени, и вам нужно создать правильно отформатированное время? Если нет, игнорируйте все остальное...

Возможно, это не ЛУЧШИЙ способ, но своего рода хороший водопад: преобразуйте миллисекунды в набор целых чисел для дней, часов, минут, секунд (или больше или меньше, в зависимости от ожидаемого диапазона), а затем повторите вперед через формат нить. Если указан день, отлично, вставьте туда количество дней. Если нет, пропустите, умножьте на 24 и прибавьте к часам. Сделайте то же самое для часов-> минут, минут-> секунд, и вы должны получить его правильно отформатированный, даже если в странных форматах (например, дни и секунды, но не минуты).

person yoozer8    schedule 04.08.2011
comment
Да, вы поняли, что я имею в виду. Но эта итерация вперед по строке формата звучит как уродливое форматирование строки, о котором я упоминал в своем вопросе :( - person slaindevil; 04.08.2011
comment
Просто проверьте, если .indexOf(M) == -1 - person yoozer8; 05.08.2011
comment
Я даю этому статус ответа, потому что это самый близкий ответ на мой вопрос. - person slaindevil; 07.08.2011

Я не уверен, что именно вы пытаетесь преобразовать, но посмотрите единицы времени.

person Andrei    schedule 04.08.2011

Не совсем уверен, что вы ищете, но вы можете так анализировать миллисекунды;

private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("dd MMM yyyy");

public static void main(String[] args) {
    final long millis = System.currentTimeMillis();
    System.out.println(DATE_FORMAT.format(new Date(millis))); // Prints 05 Aug 2011
}

Очевидно, что вы можете настроить формат даты по мере необходимости, чтобы отображались секунды, миллисекунды и т. д.

person hoipolloi    schedule 04.08.2011
comment
Спасибо, но я не пытаюсь нормальное форматирование. Я хочу отображать минуты только в том случае, если минута находится в заданной строке формата. Если в строке формата не указана минута, то все секунды должны быть преобразованы в секунды (если они указаны в строке формата). - person slaindevil; 04.08.2011