2011-02-17 79 views
0

我想將1970年以來的秒數轉換爲特定時區的日期時間。將1970年以來的秒數轉換爲特定時區的DateTime?

我有毫秒的時間和服務器的時區。 我通過調用API獲取這些值。我想知道該時區的年,月,日。

int milisecond = 12347586484; zone =「GMT +8.00」;

我該怎麼做?

感謝, 西德妮

編輯:我會得到正確的日期,如果我使用gmtime的()?

timeinmilisecond + 8*360000; 

struct tm *jobCreationtm; 
time_t t = (time_t)(timeinmilisecond); 
jobCreationtm = gmtime(&t); 

注意:我不想使用第三方dll。

+0

您是否使用Visual Studio C++? – 2011-02-17 09:01:02

回答

0

您可以將TZ環境變量設置爲所需的時區(請參閱tzset的手冊頁),然後調用localtime。

喜歡的東西(現在的測試):

#include <iostream> 
#include <stdlib.h> 
#include <time.h> 

int main() 
{ 
    ::putenv("TZ=GMT+8"); 
    time_t t = ::time(0); 
    tm* x = ::localtime(&t); 
    char buf[1024]; 
    ::strftime(buf, sizeof(buf), "%a, %d %b %Y %H:%M:%S %z", x); 
    std::cout << ::getenv("TZ") << std::endl; 
    std::cout << "[" << buf << "]" << std::endl; 
    return 0; 
} 

輸出:

GMT+8 
[Thu, 17 Feb 2011 02:22:41 -0800] 
0

什麼格式是從服務器的時區?格林威治標準時間偏移量還是格式化爲「America \ Los Angeles」。由於結果是不同的一年中的基準時間(日光節省)和隨時間變化(中西部的某些縣例如每隔幾年從EST轉換到CST),所以它很難用第三方庫。可以考慮安裝ICU library。給定時間戳和區域設置(或GMT偏移量),可以使用TimeZone類很容易地獲得格式化的時間/日期字符串。

相關問題