Перетворити з днів у мілісекунди


75

Я хочу створити функцію, яка перетворить дні в мілісекунди. Формат днів зберігається як 0,2444, то як перетворити його в мілісекунди?


10
Скільки годин на день? Скільки хвилин на годину? Скільки секунд за хвилину? Скільки мілісекунд за секунду?
Rup

1
0.2444що це означає?
jmj

@Jigar Joshi це, мабуть, означає .2444 за день, тобто 24,44% або 5,86 години.
Даніель Райан

6
О, і не забувайте, що деякі дні складають 25 годин, деякі 23 години, а деякі навіть 23 години 59 хвилин59 секунд (стрибкова секунда).
жираф

1
@giraff - функція, яка перетворює частку певного дня в мілісекунди, повинна приймати два аргументи або неявний аргумент (наприклад, "сьогодні"). Мені важко повірити, що це те, що дійсно потрібно додатку OP. (Наприклад, ніхто в здоровому розумі не вимагатиме від користувача введення частки дня в табель обліку робочого часу з урахуванням кількості годин у конкретний день . Зараз ми не знаємо, що це така програма OP, але. ..)
Стівен С

Відповіді:


268

На мою думку, найкраща практика для цього:

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.

8
Ні, це не слід сприймати як відповідь, оскільки DAYS.toMillis приймає лише довгі аргументи, а у ОП дні в подвійному
omubomír

ця відповідь - це відповідь, яку шукає більшість людей, які приїжджають сюди, але не відповідь на OP
OsaSoft

117

На додаток до інших відповідей, є ще клас TimeUnit, який дозволяє перетворити одну тривалість часу в іншу. Наприклад, щоб дізнатись, скільки мілісекунд складає один день:

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

Зверніть увагу, що цей метод займає значення long, тому, якщо у вас є частка дня, вам доведеться помножити її на кількість мілісекунд за один день.


20

Не days * 24 * 60 * 60 * 1000вистачить?


2
Ймовірно, він хоче, щоб він був довгим, тому вам, можливо, доведеться округлити його від дубля в кінці теж.
Rup


11

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

(24*60*60 + 1) * 1000

Виникає запитання Чи задовольняє високосні секунди Календар? а відповідь - ні.

Тож, якщо ви розробляєте суперзалежне від часу програмне забезпечення, будьте обережні з цією формулою.


1
Просто якщо комусь цікаво - у 2016 році відбудеться стрибкова секунда
Рустем Мустафін

3
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);
}

1
int day = 5;
long dayInMilliseconds = day * org.apache.commons.lang.time.DateUtils.MILLIS_PER_DAY

1
завжди краще пояснити, що означає ваша відповідь. Будь ласка, приділіть кілька хвилин, щоб проілюструвати, як працює цей код
DaFois

1

Ви можете використовувати цей клас корисності -

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.