的信息頁的GNU date
命令包含這個例子:如何以編程方式將時間從一個時區轉換爲另一個時區?
例如,與GNU
date
命令,你可以回答這個問題 「現在是什麼時候在紐約當 巴黎時鐘顯示6 :10月30日上午 31,2004?通過使用開始 用`TZ =「歐洲/巴黎」日期「作爲 顯示下面的shell成績單:$ export TZ="America/New_York" $ date --date='TZ="Europe/Paris" 2004-10-31 06:30' Sun Oct 31 01:30:00 EDT 2004
在這個例子中,‘--date’ 操作數以自己的」 TZ ' 設置,因此該操作數 的其餘部分根據 「歐洲/巴黎」規則進行處理,將 字符串
2004-10-31 06:30
當作 在巴黎處理。但是,由於date
命令的 輸出是 根據整體 時區規則進行處理,因此它使用紐約 時間。 (巴黎是正常6小時 比紐約早在2004年,但這個 例子是指一個簡短的萬聖節 時期的差距是五小時)。
我想編程基本上完成同樣的事情在C而無需撥打date
程序數百萬次。基本上我正在尋找一種方法在一個時區採取任意日期和時間,並將其轉換爲另一個時區中的等效日期和時間,直接或通過UTC和UTC的轉換。只要我可以使用標準功能(strftime
/strptime
/mktime
/etc)來操作它們,我不關心輸入和輸出時間的格式。
的date
程序似乎做到這一點使用內部的coreutils
封裝複雜的程序,我正在尋找一種方式使用標準POSIX/Linux的程序或外部庫做這在C。我看了一下zoneinfo,這似乎很有前途,但我找不到任何圖書館來做任何有用的工作。
有一些微妙的問題涉及手動計算,我試圖避免,如必須處理如DST。這些信息包含在zoneinfo數據庫中,但目前尚未證實對我有用。 – 2010-03-09 23:49:33
例如,這項工作在委內瑞拉尤其糟糕 - 這是正式的UTC-4:30 – Quintus 2010-03-10 00:30:41