从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