Конвертировать из дней в миллисекунды

Я хочу создать функцию, которая будет конвертировать дни в миллисекунды. Формат дней хранится как 0.2444, так как преобразовать это в миллисекунды?

6 ответов

На мой взгляд, лучшая практика для этого:

TimeUnit.DAYS.toMillis(1);     // 1 day to milliseconds.
TimeUnit.MINUTES.toMillis(23); // 23 minutes to milliseconds.
TimeUnit.HOURS.toMillis(4);    // 4 hours to milliseconds.
TimeUnit.SECONDS.toMillis(96); // 96 seconds to milliseconds.

В дополнение к другим ответам, есть также класс TimeUnit, который позволяет вам преобразовывать одно время в другое. Например, чтобы узнать, сколько миллисекунд составляет один день:

TimeUnit.MILLISECONDS.convert(1, TimeUnit.DAYS); //gives 86400000

Обратите внимание, что этот метод занимает long, так что если у вас есть доля дня, вам придется умножить ее на количество миллисекунд в одном дне.

Не будет days * 24 * 60 * 60 * 1000 хватает?

24 часа = 86400 секунд = 86400000 миллисекунд. Просто умножьте свой номер на 86400000.

Важно отметить, что один раз в 4-5 лет этот метод может давать ошибку в 1 секунду из-за високосной секунды ( http://www.nist.gov/pml/div688/leapseconds.cfm) и правильной формулы в этот день будет

(24*60*60 + 1) * 1000

Возникает вопрос, учитываются ли в Календаре дополнительные секунды? И ответ нет.

Итак, если вы разрабатываете супер-зависимое от времени программное обеспечение, будьте осторожны с этой формулой.

public static double toMilliSeconds(double day)
{
    return day * 24 * 60 * 60 * 1000;
}

или как long:

public static long toMilliSeconds(double day)
{
    return (long) (day * 24 * 60 * 60 * 1000);
}

Вы можете использовать этот служебный класс -

public class DateUtils
{
    public static final long SECOND_IN_MILLIS = 1000;
    public static final long MINUTE_IN_MILLIS = SECOND_IN_MILLIS * 60;
    public static final long HOUR_IN_MILLIS = MINUTE_IN_MILLIS * 60;
    public static final long DAY_IN_MILLIS = HOUR_IN_MILLIS * 24;
    public static final long WEEK_IN_MILLIS = DAY_IN_MILLIS * 7;
}

Если вы работаете над платформой Android, просто importон (также называемый DateUtils) под package android.text.format

int day = 5;
long dayInMilliseconds = day * org.apache.commons.lang.time.DateUtils.MILLIS_PER_DAY
Другие вопросы по тегам