這一個現在一直困擾我一分鐘。我正在編寫一個用C++編寫的程序,我需要能夠在兩個不同的服務器之間發送ISO8601編碼的時間。這裏主要的堅持者似乎是Windows。將UTC tm *轉換爲本地化tm *的跨平臺方式?
到目前爲止,我已經從NetBSD移植了strptime()
,以便輕鬆讀取日期/時間字符串並將其變爲tm*
。然而,當我把它變成一個本地化的tm*
時,我完全被難住了,於是我可以使用strftime()
在本地時區顯示這個時間給用戶。一種天真的做法是簡單地取localtime(time(0))
和gmtime(time(0))
之間的差異,但這對於涉及夏令時的任意日期將不一致。
到目前爲止,我採用的方法是僅使用POSIX日期和時間函數,並在必要時編寫Windows填充程序(如果需要,可以在strptime()
和timegm()
之間完成)。我寧願繼續這樣做,但簡單的事實是,Windows中的tm*
結構缺少一些Linux和OSX所做的字段,所以我可能沒有選擇,只能編寫由#if WIN32
保護的非可移植代碼。我也非常喜歡不必爲此而提振。
即使你不想使用升壓,我還是會建議你使用boost是否能解決問題? – villintehaspam