@Martivic

Как перевести дату в миллисекунды?

Здравствуйте!
Имеем дату записанную в переменные типа int year, month, monthDay;
Задача перевести эту дату в миллисекунды не используя вспомогательные классы.
Пробовал (year- 1970) * 31556926000L + (month - 1) * 2629743000L + monthDay * 86400000L, не получается. Объясните в чем ошибка?
  • Вопрос задан
  • 4354 просмотра
Решения вопроса 1
gbg
@gbg
Любые ответы на любые вопросы
Вероятнее всего, результат не вмещается в long int (32 бита), и нужно взять long long int (64 бита).
45 лет, напрмер, это (грубо): 45*365*24*60*60*1000=1 419 120 000 000 - такое число точно в long int не влезет.
Формула перевода даты в количество дней выглядит простоватой и скорее всего, не верна.

Правильная формула для даты (взял из исходников IBPP):
uint64_t convertDate(int d, int m, int y)
{
    if (m < 3)
    {
        m += 12; y -= 1;
    }
    return((d + (153*m - 457) / 5 + 365*y + y/4 - y/100 + y/400 - 306)-693596);
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы