使用c ++获取特定时区的当前时间

时间:2017-04-21 08:23:09

标签: c++ linux windows time

我的代码应该适用于linux& windlow也是。 我想在YYYY-MM-DD HH24:MI:SS获得当前时间。默认时区为UTC + 08,因为我的系统可以位于任何时区。

如果你可以帮助我使用c ++代码(我没有c ++ 11,14编译器)会很有帮助

我看到了一个解决方案 - 使用时间以UTC格式获取当前时间,然后将TZ环境变量操作到目标时区。然后使用localtime_r转换为该时区的本地时间。

但不确定如何使用适用于Windows和Linux的c ++来实现这一目标。

2 个答案:

答案 0 :(得分:0)

我建议查看加强库boost/date_time/posix_time/posix_time.hpp

然后你可以从那里得到当前的当地时间:

boost::posix_time::ptime curr_time = boost::posix_time::microsec_clock::local_time();

它有根据需要将其转换为字符串的方法:

std::string curr_time_str = to_simple_string(curr_time);

回到ptime对象:

curr_time = boost::posix_time::time_from_string(curr_time_str);

http://www.boost.org/doc/libs/1_61_0/doc/html/date_time/posix_time.html

答案 1 :(得分:0)

应该适用于大多数平台:

int main(int argc, const char * argv[])
{  
         time_t ts = 0;
              struct tm t;
              char buf[16];
              ::localtime_r(&ts, &t);
              ::strftime(buf, sizeof(buf), "%z", &t);
              std::cout << "Current timezone: " << buf << std::endl;
              ::strftime(buf, sizeof(buf), "%Z", &t);
              std::cout << "Current timezone: " << buf << std::end;
        ...

}