如何将“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