2013-07-12 50 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.所要求的。 –

相關問題