c - 如何在 C 中将 "2012-03-02"转换为 unix 纪元时间?

标签 c datetime date time

代表 2012 年 3 月 2 日的字符串“2012-03-02”作为输入变量 (char *) 提供给我。

如何在 C 语言中将此日期转换为 unix 纪元时间?

最佳答案

本地时间还是 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

如果是本地时间,问题会变得很糟糕,因为 time_t 不能保证表示为自纪元以来的秒数,POSIX 系统除外,而且它很难计算与纪元对应的 time_t 值(mktime 将不起作用,因为它使用本地时间)。不过,一旦计算出纪元的 time_t,只需使用 mktime 作为您解析的时间值,然后调用 difftime

关于c - 如何在 C 中将 "2012-03-02"转换为 unix 纪元时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9542278/

相关文章:

c - GCC 的 "-Wl,option"和 "-Xlinker option"语法有区别吗?

c - 指针重新分配

mysql - 使 LEAST() 函数返回非空值

c - 32位单元C编程语言的范围

objective-c - 将枚举与多个值进行比较,而不是按位

java - OffsetDateTime 时间正在改变时区偏移

Java转换时区

C# DateTime.TryParse 让我很困惑

iphone - objective-c - NSDateFormatter 返回错误的日期

java - 秒过去函数的奇怪行为