【问题标题】:Specific Time Zone In boost::posix_time::ptimeboost::posix_time::ptime 中的特定时区
【发布时间】:2010-01-25 03:41:44
【问题描述】:

我有以下时间:

2010-01-25 03:13:34.384 - GMT Time Zone
2010-01-25 11:13:34.384 - My Local

我希望以毫秒为单位转换为时间戳。但是,由于我只从调用者那里获取本地时间字符串 “2010-01-25 11:13:34.384”

如果我这样做:

// ts is "2010-01-25 11:13:34.384" (My Local)
boost::posix_time::ptime t(boost::posix_time::time_from_string(ts));
boost::posix_time::ptime end(boost::gregorian::date(1970,1,1));
boost::posix_time::time_duration dur = t - end;
// epoch is 1264418014384
// 2010-01-25 11:13:34.384 (GMT)  -- But I want 2010-01-25 03:13:34.384
// 2010-01-25 19:13:34.384 (My Local) -- But I want 2010-01-25 11:13:34.384
long long epoch = dur.total_milliseconds();

有没有办法告诉 boost::posix_time,它接收到的 ts 字符串属于 My Local timezone?

【问题讨论】:

    标签: c++ boost


    【解决方案1】:

    我的本​​地树中有这个(命名空间前缀省略):

        /// wall-clock translation to UTC
        const ptime from_wall_clock( const ptime& value,
                                     const time_zone_ptr& from )
        {
            assert( from.get());
    
            // interpret as local time
            const local_date_time from_local( value.date(),
                value.time_of_day(), from,
                local_date_time::NOT_DATE_TIME_ON_ERROR );
    
            // get UTC
            return from_local.utc_time();
        }
    

    【讨论】:

    • 请问您如何获取当前时区?
    • 你把它保存在 TZ 环境变量中。
    【解决方案2】:

    我认为您应该使用处理时区的boost::local_date_time。文档中有一个示例与您尝试执行的操作非常相似:http://www.boost.org/doc/libs/1_41_0/doc/html/date_time/examples.html#date_time.examples.seconds_since_epoch

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-13
      • 2010-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多