2017-09-15 56 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中转换为目标时区。 –