変換

2017-09-15 2 views
1

これは私が何をしようとしていますものです:変換

  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; 
} 
    cppreference.com上の例では、値が put_time()を使用して印刷することができる方法を示して
  1. 。それを変数に格納する方法は?
  2. UTCの時刻形式を現在のタイムゾーンに変換する方法(入力としてタイムゾーンを指定します)?上記のコメント付きコードをthis linkとして使用しようとしましたが、パラメータはありません。
+0

は、C++のクロノライブラリを考えます。 – Charles

+0

@Charles、それを使ってタイムゾーンで作業することはできますか?どのようにタイムゾーンを変更するのですか? –

+0

ここに[std :: localtime](http://en.cppreference.com/w/cpp/chrono/c/localtime)と呼ばれるものがあります – Charles

答えて

1

あなたがリストに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; 

} 

を使用してタイムゾーンを設定することができUTC のための現地時間とGMT時間を取得し、ローカルタイムを使用することができ、出力

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時刻を現地時間に動的に変換する方法(例えば、タイムゾーンをパラメータの1つとして渡す)はどうですか? –

+0

私はOPがタイムゾーンより多くの制御を望んでいると思います – Charles

+0

@Charles、はい、ターゲットタイムゾーンに変換するための 'TimeZone timeZone = TimeZone.getTimeZone(" Europe/Copenhagen "); –