Как вычислить число секунд с начала этого дня?

Я хочу получить число секунд с полуночи.

Вот мое первое предположение:

  time_t current;
  time(&current);
  struct tm dateDetails;
  ACE_OS::localtime_r(&current, &dateDetails);

  // Get the current session start time
  const time_t yearToTime     = dateDetails.tm_year - 70; // year to 1900 converted into year to 1970
  const time_t ydayToTime     = dateDetails.tm_yday;
  const time_t midnightTime   = (yearToTime * 365 * 24 * 60 * 60) + (ydayToTime* 24 * 60 * 60);
  StartTime_                  = static_cast<long>(current - midnightTime);
5
задан yves Baumes 6 March 2010 в 13:54
поделиться

1 ответ

Вы можете использовать стандартный API C:

  1. Получить текущее время с помощью time () .
  2. Преобразуйте его в struct tm с помощью gmtime_r () или localtime_r () .
  3. Установите его tm_sec , tm_min , tm_hour на ноль.
  4. Преобразуйте его обратно в time_t с помощью mktime () .
  5. Найдите разницу между исходным значением time_t и новым.

Пример:

#include <time.h>
#include <stdio.h>

time_t
day_seconds() {
    time_t t1, t2;
    struct tm tms;
    time(&t1);
    localtime_r(&t1, &tms);
    tms.tm_hour = 0;
    tms.tm_min = 0;
    tms.tm_sec = 0;
    t2 = mktime(&tms);
    return t1 - t2;
}

int
main() {
    printf("seconds since the beginning of the day: %lu\n", day_seconds());
    return 0;
}
12
ответ дан 18 December 2019 в 09:06
поделиться
Другие вопросы по тегам:

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