2017-09-15 55 views
1

這就是我要做的:轉換的C倍++

  1. 取得本地時間(從系統);
  2. 將該時間轉換爲UTC格式並將其與當前對象的某個成員變量相關聯。
  3. 稍後,考慮到用戶的時區,我希望將其轉換爲正確的本地時間並將其顯示給用戶。

仰望的SO和CppReference幾件事情,我能想出下面的代碼片段:

#include <iostream> 
#include <iomanip> 
#include <ctime> 
#include <string> 

using namespace std; 

int main() 
{ 
    time_t lt = std::time(0); 
    //time(0) gives current time, but LTime shows the UTC time (not local time) 
    string LTime = std::ctime(&lt); //localtime() gives error 
    cout<<LTime; 

    //timestamp = mktime(&tm) - timezone; 
    //time_t timestamp = mktime(&tm) - _timezone; 
    //std::cout << "timestamp: " << std::put_time(timestamp, "%c %Z") << '\n'; 

    return 0; 
} 
  1. 上cppreference.com的例子說明如何值可以使用put_time()印刷;但如何將它存儲在一個變量?
  2. 如何將UTC時間格式轉換爲當前時區(給定一些時區作爲輸入)?我嘗試使用上面的註釋代碼this link,但它不包含任何參數。
+0

考慮C++的時辰庫設置時區。 – Charles

+0

@Charles,我們可以使用它來處理時區嗎?我們如何去改變它中的時區? –

+0

這裏有一個叫[std :: localtime](http://en.cppreference.com/w/cpp/chrono/c/localtime) – Charles

回答

1

您可以使用本地時間獲得UTC的當地時間和GMT時間 您可以使用列表Time zone wiki

#include <iostream> 
#include <iomanip> 
#include <ctime> 
int main() 
{ 
    std::time_t result = std::time(nullptr); 
    auto local = std::asctime(std::localtime(&result)); 
    std::cout <<local; 
    std::cout << "UTC: " << std::put_time(std::gmtime(&result), "%c %Z") << '\n'; 
    putenv("TZ=Asia/Singapore"); 
    local = std::asctime(std::localtime(&result)); 
    std::cout <<"Asia/Singapore Time "<<local; 

} 

輸出

Thu Sep 14 21:59:37 2017 
UTC: Fri Sep 15 01:59:37 2017 UTC 
Asia/Singapore Time Fri Sep 15 09:59:37 2017 
Program ended with exit code: 0 
+0

謝謝。然後如何將UTC時間動態地轉換爲本地時間(比如說,將時區作爲參數之一傳遞)? –

+0

我認爲OP想要更多地控制時區 – Charles

+0

@Charles,是的,使用像TimeZone timeZone = TimeZone.getTimeZone(「Europe/Copenhagen」);'在Java中轉換爲目標時區。 –