我寫一個應用程序轉換UTC時間以不同的時區線程安全的方式,現在我可以使用這樣的轉換時區之間的時間
putenv("TZ=TIMEZONE1");
tzset()
...
do time conversions
,但我不認爲它是線程安全的,所以是否有任何C/C++庫可以通過以時區作爲參數來實現時區轉換,而不是一些全局功能
我寫一個應用程序轉換UTC時間以不同的時區線程安全的方式,現在我可以使用這樣的轉換時區之間的時間
putenv("TZ=TIMEZONE1");
tzset()
...
do time conversions
,但我不認爲它是線程安全的,所以是否有任何C/C++庫可以通過以時區作爲參數來實現時區轉換,而不是一些全局功能
Boost.DateTime支持時區轉換。
您可能需要您自己的代碼/庫來處理時區。標準庫的處理非常落後,不適合處理比在程序生命週期中固定的單個時區更復雜的任何事情。
但是,一種可能的解決方案是分配共享內存fork
,並在子進程中更改時區,然後將結果傳遞迴共享內存以在waitpid
在父級中返回後讀取。這是非常昂貴的,但並不像聽起來那麼糟糕,因爲現代系統上的fork
速度很快。我的經驗是,1 fork
等於2-3個撥打pthread_create
,1 pthread_create
等於2-3個open
調用。由於更改時區需要打開一個或多個文件並在其上執行IO,因此您可能不會將總時間成本增加超過3-5倍。如果您可以隨時爲您工作的每個時區保留一個子進程,那麼當然可以更高效。
+1確認,我希望有必要是在libc等東西,所以看起來像一個過程,將數據分爲時區,然後爲每個時區單獨進程是要走的路:( – 2011-06-06 20:53:37
我從來沒有使用過提升,所以我可以只包括提升日期時間? – 2011-06-06 20:56:43
確定那很簡單'sudo apt-get install libboost-date-time1.40-dev'我準備好了! – 2011-06-06 22:03:59
出於好奇,Boost是否有自己的時區數據庫或以某種方式使用系統? – 2011-06-06 22:27:47