Как извлечь часы из time_t?
Я хочу извлечь часы, минуты и секунды как целочисленные значения из значения time_t, представляющего секунды с начала эпохи.
Значение для часов не является правильным. Зачем?
#include <stdio.h>
#include <time.h>
#include <unistd.h>
int main()
{
char buf[64];
while (1) {
time_t t = time(NULL);
struct tm *tmp = gmtime(&t);
int h = (t / 360) % 24; /* ### My problem. */
int m = (t / 60) % 60;
int s = t % 60;
printf("%02d:%02d:%02d\n", h, m, s);
/* For reference, extracts the correct values. */
strftime(buf, sizeof(buf), "%H:%M:%S\n", tmp);
puts(buf);
sleep(1);
}
}
Выход (час должен быть 10)
06:15:35
10:15:35
06:15:36
10:15:36
06:15:37
10:15:37
2 ответа
Решение
Ваш звонок в gmtime()
уже делает это, в результате чего struct tm
имеет все поля. Смотрите документацию.
Другими словами, просто
printf("hours is %d\n", tmp->tm_hour);
Я бы сказал, что это правильный путь, поскольку он избегает использования слишком больших чисел для выполнения преобразования вручную в вашем коде. Он делает это наилучшим образом, превращая его в чью-то проблему (то есть абстрагируя ее). Так что исправьте ваш код, не добавляя недостающие 0
, но с помощью gmtime()
,
Также подумайте о часовых поясах.