我有印度股市的价格数据,但上面的时间和日期戳是 GMT,所以我可以使用代表正确日期和时间的数据。
我需要将我的数据库中某些记录的日期和时间从我当前的时区 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)
我试图通过运行来更改数据库本身的时区,但这不起作用:
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 的新手,但有人建议我在代码本身中使用 Boost date 来处理这个问题。
我搜索了一些帖子进行日期时间转换,但没有找到可以回答我的具体问题的帖子。
如果有一个特定的链接或者更好的是,例如某人可以分享的增强代码,这对于像我这样的 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;
}