インドの株式市場の価格データがありますが、その日時はGMTであるため、正しい日時を表すデータを使用できます。
DB内の一部のレコードの日付と時刻を現在のタイムゾーンであるGMTからISTに変換する必要があります。
mysql> desc price_hist;
+---------------+-----------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------+-----------------------+------+-----+---------+----------------+
| trade_id | int(11) | NO | PRI | NULL | auto_increment |
| contract_name | varchar(14) | NO | MUL | NULL | |
| trade_date | date | NO | | NULL | |
| trade_time | varchar(6) | NO | | NULL | |
| trade_price | decimal(10,4) | NO | | NULL | |
| trade_volume | bigint(20) | NO | | NULL | |
+---------------+-----------------------+------+-----+---------+----------------+
8 rows in set (0.02 sec)
を実行してDB自体のタイムゾーンを変更しようとしましたが、機能しませんでした。
select convert_tz("2010-06-30 19:00:00",'GMT','IST');
+-----------------------------------------------+
| convert_tz("2011-06-30 09:00:00",'GMT','IST') |
+-----------------------------------------------+
| NULL |
+-----------------------------------------------+
1 row in set (0.01 sec)
私はBoostを初めて使用しますが、コード自体でこれを処理するためにBoostdateを使用することをお勧めします。
いくつかの投稿で日時変換を検索しましたが、特定の質問に答える投稿が見つかりませんでした。
特定のリンクがある場合、またはもっと良いのは、誰かが共有できるブーストコードの例です。これは、私のようなnubeeにとって素晴らしいスタートです。:-)
提供されているリファレンス@Karisonを使用して、次のコードを記述しました。
#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=tz_db.time_zone_from_region("America/Chicago");
time_zone_ptr jst_tz(new posix_time_zone("EST+5:00:00"));
local_date_time jpn_time(date(2012,Jan,3), hours(16), jst_tz,local_date_time::NOT_DATE_TIME_ON_ERROR);
local_date_time osaka_time = jpn_time.local_time_in(chi_tz);
std::cout<<"osaka_time: "<<osaka_time<<std::endl;
return 0;
}