Управление високосными секундами в управлении временем

Я только что узнал, что второй прыжок будет добавлено в конце этого месяца (июнь 2015 г.). Я немного боюсь этого, потому что я провожу свой собственный урок времени. Я не уверен, что это достаточно надежно.

Я создал класс Instant работая с unsigned long long int переменная-член ms это количество миллисекунд от 01/01/1600 в 0:00:00,

Когда я хочу узнать текущее время, я вызываю эту функцию:

void Instant::setCurrentTime()
{
struct timeval tv;
gettimeofday(&tv, NULL);
this->ms = NBR_DAYS_TO_EPOCH; // 135140
this->ms *= NBR_SECONDS_IN_DAY; // 86400
this->ms += tv.tv_sec;
this->ms *= NBR_MILLISECONDS_IN_SECOND; // 1000
this->ms += tv.tv_usec/1000;
}

Мой первый вопрос: Как високосные секунды влияют на это число? Это уже учтено в tv.tv_sec значение ? Как ?

Мой второй вопрос о преобразовании в читабельный формат. Я не публикую его здесь, потому что моя функция довольно большая (я могу опубликовать ее, если потребуется), но идея заключается в следующем:

  • Сначала я вычисляю количество секунд в текущем дне, а затем количество минут и часов;
  • Я вычисляю количество дней до текущего дня;
  • Затем я вычисляю количество циклов 400 лет (периодический процесс), количество циклов 100 лет в текущем цикле 400 лет и количество циклов 4 года в текущем цикле 4 года;
  • Отсюда я делаю год (скачок или нет), месяц, день и день недели;
  • Затем я проверяю, активировано ли летнее время, и обновляю значения в соответствии с зоной (Европа, США до 2007 года, США с 2007 года);
  • Все это без учета 25 дополнительных секунд, добавленных с 1970 года.

На данный момент мой класс не может сказать «мы 30/06/2015 в 23:59:60«потому что мое количество секунд ограничено 59, Но также потому, что я не знаю, как справиться с этим. что может быть хорошим способом?

0

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]