如何使用boost :: date_time在本地时间和世界时间之间进行转换?

Ale*_*x B 11 c++ timezone boost

如何使用当前系统时区在本地和UTC时间(特别是从本地到UTC)之间进行转换?我知道,但它需要一个模板参数,它是一个与时区相关的偏移量.boost::date_timeboost::date_time::local_adjustor

失败的独立平台的方式,我将如何在Linux上专门做到这一点?

另外,在转换过程中如何处理不存在的时间点?例如,如果一天因DST而短一小时,并且我尝试从缺失的小时转换时间点,那将是什么样的通用时间?

Dmi*_*riy 7

我正在使用以下代码来查找本地和UTC时间之间的差异:


    using namespace boost::posix_time;
    using namespace boost::gregorian;

    time_duration UTC_Diff;
    {
        ptime someUTC_Time(date(2008, Jan, 1), time_duration(0, 0, 0, 0));
        ptime someLocalTime = boost::date_time::c_local_adjustor::utc_to_local(someUTC_Time);
        UTC_Diff = someLocalTime - someUTC_Time;
    }
Run Code Online (Sandbox Code Playgroud)

既然你发现差异并不容易加速UTC时间.


Anu*_*yal 5

如果您的local_date_time时区正确,则可以直接使用utc_time方法获取UTC时间.

看起来你有一些简单的ptime,你想解释为在给定的时区,然后将其转换为UTC,我使用这个构造函数

local_date_time(...)
  Parameters:
    date
    time_duration 
    time_zone_ptr
    bool
Run Code Online (Sandbox Code Playgroud)

根据文档,它重新解释给定时间数据在给定时区,这意味着它可以用于本地化任何给定的ptime,并且在utc_time可以使用该方法之后,这里是一个效用函数,用于将任何ptime从给定时区转换为UTC

ptime get_local_to_utc(const ptime& t, const time_zone_ptr& localtz){
    if(t.is_not_a_date_time()) return t;
    local_date_time lt(t.date(), t.time_of_day(), localtz, local_date_time::NOT_DATE_TIME_ON_ERROR);
    return lt.utc_time();
}
Run Code Online (Sandbox Code Playgroud)