Определенный часовой пояс в boost :: posix_time :: ptime - PullRequest
3 голосов
/ 25 января 2010

У меня есть время:

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 принадлежит моему локальному часовому поясу?

Ответы [ 2 ]

2 голосов
/ 25 января 2010

У меня есть это в моем локальном дереве (префикс пространства имен опущен):

    /// 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();
    }
2 голосов
/ 25 января 2010

Я думаю, вы должны использовать 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...