Подтвердить что ты не робот

как показывать миллисекунды в днях: часы: мин: секунды

Это то, что у меня есть на данный момент

Seconds = (60 - timeInMilliSeconds / 1000 % 60);
Minutes = (60 - ((timeInMilliSeconds / 1000) / 60) %60);

что я считаю правильным. в течение нескольких часов и дней, если это будет похоже -

Hours = ((((timeInMilliSeconds / 1000) / 60) / 60) % 24);
Days =  ((((timeInMilliSeconds / 1000) / 60) / 60) / 24)  % 24;

и then-

TextView.SetText("Time left:" + Days + ":" + Hours + ":" + Minutes + ":" + Seconds);

но мои часы и дни выходят неправильно

4b9b3361

Ответ 1

Простой способ рассчитать время - это использовать что-то вроде

long seconds = timeInMilliSeconds / 1000;
long minutes = seconds / 60;
long hours = minutes / 60;
long days = hours / 24;
String time = days + ":" + hours % 24 + ":" + minutes % 60 + ":" + seconds % 60; 

Это будет работать, если у вас есть более 28 дней, но нет, если у вас есть отрицательное время.

Ответ 2

SimpleDateFormat - ваш друг! (Я только что открыл его сегодня, это потрясающе.)

SimpleDateFormat formatter = new SimpleDateFormat("dd:HH:mm:ss", Locale.UK);

Date date = new Date(timeInMilliSeconds);
String result = formatter.format(date);

Ответ 3

Чтобы отформатировать прошедшие/оставшиеся времена в android, используйте android.text.format.DateUtils, в частности, getRelativeTimeSpanString и formatElapsedTime.

Ответ 4

Привет, как насчет этого кода?

example)

              0 ms -> 0 ms
            846 ms -> 846ms
          1,000 ms -> 1s
          1,034 ms -> 1s 34ms
         60,000 ms -> 1m
         94,039 ms -> 1m 34s 39ms
      3,600,000 ms -> 1h
     61,294,039 ms -> 17h 1m 34s 39ms
     86,400,000 ms -> 1d
    406,894,039 ms -> 4d 17h 1m 34s 39ms
 31,536,000,000 ms -> 1y
 50,428,677,591 ms -> 1y 218d 15h 57m 57s 591ms



/**
 * 
 * @since 2018. 1. 9.
 * @author Park_Jun_Hong_(fafanmama_at_naver_com)
 */
public class TimeUtils {

    /**
     * 
     * @since 2018. 1. 9.
     */
    private TimeUtils() {
    }

    private static void appendTimeAndUnit(StringBuffer timeBuf, long time, String unit) {
        if (time < 1) {
            return;
        }

        timeBuf.append(time);
        timeBuf.append(unit);
    }

    private static void prependTimeAndUnit(StringBuffer timeBuf, long time, String unit) {
        if (time < 1) {
            return;
        }

        if (timeBuf.length() > 0) {
            timeBuf.insert(0, " ");
        }

        timeBuf.insert(0, unit);
        timeBuf.insert(0, time);
    }

    /**
     * Provide the Millisecond time value in {year}y {day}d {hour}h {minute}m {second}s {millisecond}ms. <br>
     * Omitted if there is no value for that unit.
     * 
     * @param timeInMillis
     * @return
     *
     * @since 2018. 1. 9.
     */
    public static String toYYYYHHmmssS(long timeInMillis) {

        if (timeInMillis < 1) {
            return "0 ms";
        }

        StringBuffer timeBuf = new StringBuffer();

        long millis = timeInMillis % 1000;
        appendTimeAndUnit(timeBuf, millis, "ms");

        // second (1000ms) & above
        long time = timeInMillis / 1000;
        if (time < 1) {
            return timeBuf.toString();
        }

        long seconds = time % 60;
        prependTimeAndUnit(timeBuf, seconds, "s");

        // minute(60s) & above
        time = time / 60;
        if (time < 1) {
            return timeBuf.toString();
        }

        long minutes = time % 60;
        prependTimeAndUnit(timeBuf, minutes, "m");

        // hour(60m) & above
        time = time / 60;
        if (time < 1) {
            return timeBuf.toString();
        }

        long hours = time % 24;
        prependTimeAndUnit(timeBuf, hours, "h");

        // day(24h) & above
        time = time / 24;
        if (time < 1) {
            return timeBuf.toString();
        }

        long day = time % 365;
        prependTimeAndUnit(timeBuf, day, "d");

        // year(365d) ...
        time = time / 365;
        if (time < 1) {
            return timeBuf.toString();
        }

        prependTimeAndUnit(timeBuf, time, "y");

        return timeBuf.toString();
    }
}

Ответ 5

Вы также можете использовать API-интерфейс joda-времени (http://joda.org/joda-time/)

"Класс DateTimeFormat предоставляет единый метод forPattern (String), который поддерживает форматирование по шаблону. Эти" шаблонные "форматирования обеспечивают аналогичный подход к методу SimpleDateFormat".

LocalDate date = LocalDate.now();
DateTimeFormatter fmt = DateTimeFormat.forPattern("d MMMM, yyyy");
String str = date.toString(fmt);