编程语言
首页 > 编程语言> > 从C/C++中的日期和时间转换为UNIX时间戳的正确方法是什么?

从C/C++中的日期和时间转换为UNIX时间戳的正确方法是什么?

作者:互联网

我有很多时间用这种格式:

day.mon.year - hour:min:sec

我需要将这些日期随时间转换为Unix时间戳.

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

tm_wday
tm_yday

而且我不必填写那些字段,因为我不知道这个字段对Unix时间戳的值有什么影响.

帮我选择计算Unix时间戳的方法.

附:有时间的日期不是最新的,它们可以是20世纪的日期或未来的日期(到2038年).

P.P.S.我使用OS Windows.

解决方法:

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等函数不使用与“Unix时间戳”相同的格式time_t,这也可以工作.

如果您的原始时间是当地时间,则可以使用mktime和gmtime将其转换为GMT,使用系统的时区规则概念.如果您想应用自己的时区偏移规则,请在使用上述公式之前手动执行此操作.

标签:c-3,c,datetime,date,unix-timestamp
来源: https://codeday.me/bug/20190831/1777872.html