Для начала давайте изменим синтаксис и разделим вопросы, как я вижу, их 3.
Первый синтаксис convert_tz
принимает строку, которая должна выглядеть как вызов:
select convert_tz('2011-06-30 09:00:00','GMT','IST')
Одиночные галочки, а не двойные кавычки.
Во-вторых. Если ваша машина находится в том же часовом поясе, и вы работаете в POSIX-совместимой системе, вы можете получить строку, представляющую дату, и выполнить:
struct tm result;
strptime(<time string>, <format string>, &result);
time_t epoch_time = mktime(&result);
, который даст вам стандартное время UNIX, которое вы затем сможете использовать, чтобы сделать все, что вам нужно.
Последнее, но не менее важное Повышение. Конечно, это мощная библиотека, но я не думаю, что для проекта вам нужно добавить сложность в это время. Если вы все еще испытываете желание попробовать его или не используете POSIX-совместимую систему, вы можете взглянуть на http://www.boost.org/doc/libs/1_48_0/doc/html/date_time.html,, который вам все равно потребуется для создания ptime
из строки, которую вы возвращаете из базы данных, а затем манипулировать это, как вы считаете нужным. Используя часть local_time
, создайте объекты часового пояса так, как вам нужно, и затем проверьте время, которое вы получаете из базы данных. Вы можете посмотреть примеры в http://www.boost.org/doc/libs/1_48_0/doc/html/date_time/examples/general_usage_examples.html
Особенно последний. Так что для вашего примера это будет:
time_zone_ptr src_zone(new posix_time_zone("IST+05:30:00"));
time_zone_ptr dst_zone(new posix_time_zone("CST"));
local_date_time trd_time(date(....), hours(...), src_zone,
local_date_time::NOT_DATE_TIME_ON_ERROR);
local_date_time res_time = trd_time.local_time_in(dst_zone);
Не могу гарантировать, что это будет на 100% правильно, но вы поняли идею.
* +1025 * Пример:
#include "boost/date_time/local_time/local_time.hpp"
#include <iostream>
int main()
{
using namespace boost::posix_time;
using namespace boost::gregorian;
using namespace boost::local_time;
tz_database tz_db;
time_zone_ptr chi_tz(new posix_time_zone("CST-06:00:00");
time_zone_ptr jst_tz(new posix_time_zone("JST+09:00:00"));
local_date_time jpn_time(date(2012,Jan,3), hours(16),
chi_tz,local_date_time::NOT_DATE_TIME_ON_ERROR);
local_date_time osaka_time = jpn_time.local_time_in(jst_tz);
std::cout<<"osaka_time: "<<osaka_time<<std::endl;
return 0;
}