Tôi muốn trích xuất giờ, phút và giây làm giá trị số nguyên từ giá trị time_t đại diện cho giây kể từ thời đại.Làm thế nào để trích xuất giờ từ time_t?
Giá trị giờ không chính xác. Tại sao?
#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);
}
}
Output (giờ nên 10)
06:15:35
10:15:35
06:15:36
10:15:36
06:15:37
10:15:37
"int h = (t/3600)% 24; ..." làm cho _assumption_ 'time_t' bằng số nguyên giây. Mặc dù đó là phổ biến, nó không được xác định là như vậy bởi C. Sử dụng 'gmtime()/localtime()' hoặc 'difftime()' cho mã di động. – chux