如何使用boost :: date_time从time_t获取本地日期时间?

时间:2011-05-26 18:49:56

标签: c++ datetime boost boost-date-time

我正在使用boost :: date_time,我得到了一个time_t,它是由库使用C标准库中的time()函数生成的。

我正在寻找从那个时间开始获取当地时间的方法。我正在阅读文档,如果没有提供时区就找不到任何方法,我不知道因为它取决于机器的语言环境,我找不到任何方法从中获取一个

我错过了什么?

3 个答案:

答案 0 :(得分:11)

boost::posix_time::from_time_t()

#include <ctime>
#include <ostream>
#include <iostream>
#include <boost/date_time/posix_time/posix_time.hpp>
#include <boost/date_time/local_time_adjustor.hpp>
#include <boost/date_time/c_local_time_adjustor.hpp>

boost::posix_time::ptime local_ptime_from_utc_time_t(std::time_t const t)
{
    using boost::date_time::c_local_adjustor;
    using boost::posix_time::from_time_t;
    using boost::posix_time::ptime;
    return c_local_adjustor<ptime>::utc_to_local(from_time_t(t));
}

int main()
{
    using boost::posix_time::to_simple_string;
    using boost::posix_time::from_time_t;

    std::time_t t;
    std::time(&t); // initalize t as appropriate
    std::cout
        << "utc:   "
        << to_simple_string(from_time_t(t))
        << "\nlocal: "
        << to_simple_string(local_ptime_from_utc_time_t(t))
        << std::endl;
}

答案 1 :(得分:1)

对于此任务,我会忽略boost::date_time,只使用标准库中的localtime(或localtime_r,如果可用)。

答案 2 :(得分:0)

试试这个:

#include <iostream>
#include <boost/date_time/posix_time/posix_time.hpp>
#include <boost/date_time/posix_time/posix_time_io.hpp>

using namespace boost::posix_time;
using namespace std;

int main(int argc, char **argv) {

  cout << second_clock::local_time() << endl;

}

在我的方框(中央时间)上产生:

$ ./boost_local_time
2011-May-26 14:00:18

如果要格式化(这是我的测试用例),请使用

time_facet *facet = new time_facet("%d-%b-%Y %H:%M:%S");  
cout.imbue(locale(cout.getloc(), facet));   

在致电second_clock::local_time()之前。