如何将“2012-03-02”转换为C中的unix纪元时间?
表示2012年3月2日的字符串“2012-03-02”作为输入变量(char *)给出。
如何用C编程语言将此日期转换为unix纪元时间?
C(POSIX)为此提供了一个function。 使用strptime()
将字符串转换为struct tm
值。 然后,您可以使用mktime()
将struct tm
转换为time_t
。
使用sscanf
提取片段,使用提取的数据填充struct tm
(来自
),最后使用mktime
将其转换为time_t
。
time_t ParseDate(const char * str) { struct tm ti={0}; if(sscanf(str, "%d-%d-%d", &ti.tm_year, &ti.tm_mon, &ti.tm_day)!=3) { /* ... error parsing ... */ } ti.tm_year-=1900 ti.tm_mon-=1 return mktime(&ti); }
当地时间还是UTC? 如果它是UTC,那么进行转换的最简单方法是完全避免使用C时间API,并在时间段内使用POSIX中的公式:
tm_sec + tm_min*60 + tm_hour*3600 + tm_yday*86400 + (tm_year-70)*31536000 + ((tm_year-69)/4)*86400 - ((tm_year-1)/100)*86400 + ((tm_year+299)/400)*86400
资料来源: http : //pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_15
如果是本地时间,问题会变成地狱,因为除了POSIX系统之外, time_t
不能保证表示为自纪元以来的秒数,以及难以计算对应于纪元的time_t
值这一事实( mktime
将不工作,因为它使用当地时间)。 但是,一旦计算了纪元的time_t
,就只需要使用mktime
来解析你解析的时间值,然后再调用difftime
。
将它读入struct tm
并调用mktime
来获取你的time_t
。