【发布时间】:2012-02-13 12:32:50
【问题描述】:
我有印度股市的价格数据,但上面的时间和日期戳是 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 日期来处理这个问题。
我搜索了一些关于日期时间转换的帖子,但没有找到可以回答我的具体问题的帖子。
如果有一个特定的链接,或者更好的是,例如某人可以分享的增强代码,这对于像我这样的 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;
}
【问题讨论】:
-
"EST+15:00:00" 这没有意义。它应该是“EST-05:00:00”
-
它正在转换为 UTC。这就是它返回的
osaka_time: 2012-Jan-03 11:00:00 UTC当然如果我们看一下日本,日期和时间是错误的,这是我在这个例子中尝试使用的 -
同意,我如何获得 JST,因为那应该是 CST+15:00:00。如果我做 UTC + 9:00:00,它会给我错误的日期
-
一月。 2012 年 1 月 3 日而不是 2012 年 1 月 4 日。你能运行我发布的代码吗
-
如果您想在大阪的芝加哥时间下午 4 点到达,您应该创建
jpn_time并以chi_tz作为时区,并以jpn_tz作为目标报告大阪时间。否则你会得到Jan 3, 2012 01:00:00作为结果。
标签: c++ mysql datetime boost convert-tz