如何在C中从getTimeofday中获取DateTime?我需要将tv.tv_sec转换为小时:分钟:第二个XX,没有函数,例如localtime和strftime ...,只需通过计算来获取它。例如TV.TV_SEC/60(%60是分钟
#include <stdio.h>
#include <time.h>
#include<sys/time.h>
int main ()
{
struct timeval tv;
struct timezone tz;
gettimeofday(&tv,&tz);
printf("TimeZone-1=%dn", tz.tz_minuteswest);
printf("TimeZone-2=%dn", tz.tz_dsttime);
printf("TimeVal-3=%dn", tv.tv_sec);
printf("TimeVal-4=%dn", tv.tv_usec);
printf ( "Current local time and date: %d-%dn", (tv.tv_sec% (24*60*60)/3600,tz.tz_minuteswest);
return 0;
}
如何通过计算电视和TZ来获得当前的系统小时〜
假设: time_t
是自一天开始以来的秒 - 通用时间。这通常是1970年1月1日UTC,假定该代码使用给定的sys/time.h
主要思想是从tv,tz
的每个成员中提取数据以形成本地时间。一天的时间,UTC,以tv.tv_sec
的几秒钟,距离时区偏移距离和每个DST标志的小时调整。最后,确保结果在主要范围内。
各种类型的问题包括tv
的字段未指定为int
。
避免使用诸如60
之类的魔术数字。 SEC_PER_MIN
自用代码。
#include <stdio.h>
#include <time.h>
#include <sys/time.h>
#define SEC_PER_DAY 86400
#define SEC_PER_HOUR 3600
#define SEC_PER_MIN 60
int main() {
struct timeval tv;
struct timezone tz;
gettimeofday(&tv, &tz);
printf("TimeZone-1 = %dn", tz.tz_minuteswest);
printf("TimeZone-2 = %dn", tz.tz_dsttime);
// Cast members as specific type of the members may be various
// signed integer types with Unix.
printf("TimeVal-3 = %lldn", (long long) tv.tv_sec);
printf("TimeVal-4 = %lldn", (long long) tv.tv_usec);
// Form the seconds of the day
long hms = tv.tv_sec % SEC_PER_DAY;
hms += tz.tz_dsttime * SEC_PER_HOUR;
hms -= tz.tz_minuteswest * SEC_PER_MIN;
// mod `hms` to insure in positive range of [0...SEC_PER_DAY)
hms = (hms + SEC_PER_DAY) % SEC_PER_DAY;
// Tear apart hms into h:m:s
int hour = hms / SEC_PER_HOUR;
int min = (hms % SEC_PER_HOUR) / SEC_PER_MIN;
int sec = (hms % SEC_PER_HOUR) % SEC_PER_MIN; // or hms % SEC_PER_MIN
printf("Current local time: %d:%02d:%02dn", hour, min, sec);
return 0;
}
输出样本
TimeZone-1 = 360
TimeZone-2 = 1
TimeVal-3 = 1493735463
TimeVal-4 = 525199
Current local time: 9:31:03