2013-07-12 21 views
3

我有很多的日期与时间格式为:在C/C++中从日期和时间转换为UNIX时间戳的正确方法是什么?

day.mon.year - hour:min:sec 

,我需要转换这个日期与时间成Unix时间戳。

我用tm结构,但我不能填补这些领域:

tm_wday 
tm_yday 

而且我不,我必须填补这些领域,因为我不知道做这个领域拥有的任何影响Unix时间戳的值。

帮我选择一种方法来计算Unix时间戳。

P.S.与时间的日期不是最新的,它们可以是20世纪的日期或将来的日期(到2038年)。

P.P.S.我使用操作系统Windows。

+1

WTF。亲密贩子,**请GTFO,并回到驯服维基百科删除**!这是一个完全有效的问题。请注意MODS:我们是否可以获得一项功能,即经常滥用投票 - 关闭功能的用户可以暂停或永久撤销他们的投票 - 关闭权限? –

回答

5

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

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

+0

因此,夏令时时间变量不要需要计算Unix时间? –

+0

就像我说过的,公式需要以GMT格式输入.DST是将当地时间转换为GMT的一部分。 –

0

如果你在unix上,mktime()会得到时间戳的第二部分。它忽略tm_wday和tm_yday字段。

+0

我在Windows上:( –

+0

@define_rak:你可能应该提到在问题的某个地方.... – ams

+2

忽略这些字段不是unix相关的。它是ISO C.所要求的。 –

相关问题