3

我有很多这种格式的时间日期:

day.mon.year - hour:min:sec

我需要将此日期与时间转换为 Unix 时间戳。

我使用了tm结构,但我无法填写这些字段:

tm_wday
tm_yday

而且我不必填写这些字段,因为我不知道该字段对 Unix 时间戳的值有任何影响。

帮助我选择正确的方式来计算 Unix 时间戳。

PS 带时间的日期不是当前的,它们可以是 20 世纪的日期或未来的日期(到 2038 年)。

PPS 我使用操作系统 Windows。

4

2 回答 2

7

POSIX 有一个公式可以满足您的需求:

http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_15

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

只要您在 GMT 中有一个细分时间,这就会起作用,即使底层系统的mktime等函数不使用与time_t“Unix 时间戳”相同的格式。

如果您的原始时间是本地时间,您可以使用mktimegmtime使用系统的时区规则概念将其转换为 GMT。如果您想应用自己的时区偏移规则,只需在使用上述公式之前手动执行。

于 2013-07-12T15:44:10.157 回答
0

如果您使用的是 unix,mktime() 将获得时间戳的第二部分。它忽略 tm_wday 和 tm_yday 字段。

于 2013-07-12T14:18:21.587 回答