我一直使用amCharts股票图表来显示雅虎财经.csv文件中的数据,该文件以以下格式显示数据:
Date,Open,High,Low,Close,Volume,Adj Close
2011-07-27,617.18,620.95,604.75,607.22,3934400,607.22
2011-07-26,618.05,627.50,617.22,622.52,2342900,622.52
2011-07-25,613.36,625.41,613.00,618.98,3131600,618.98然而,现在我需要从Google finance获取数据,他们将数据格式化为这种格式(这不起作用)。
Date,Open,High,Low,Close,Volume
28-Jul-11,36.02,36.84,36.01,36.42,8870180
27-Jul-11,36.71,36.86,35.98,36.06,10395443
26-Jul-11,37.26,37.27,36.80,36.86,6366097我认为雅虎和谷歌之间的数据格式不同是导致amChart无法显示任何数据的原因,因为它无法读取文件。
如何格式化日期以使其正确读取值?
发布于 2011-10-15 13:08:21
我将假设您使用的是amstock图表1.4.0.1。在amstock_settings.xml中,您需要编辑日期格式设置。默认情况下,它使用YYYY-MM-DD,我假设它基于您的示例,是Yahoo Finance在其CSV中的默认日期格式。谷歌财经的日期格式是基于AmCharts的DD-Mon-YY,'Mon‘不是一个有效的符号。您可以尝试将设置更改为DD-Mon-YY,并查看是否有效。如果不起作用,您可能需要使用程序(例如java)将csv中的日期值更改为YYYY-MM-DD。
<!-- [YYYY-MM-DD] (date format) The valid symbols are: YYYY, MM, DD, hh, mm, ss, fff. Any order
and separators can be used, for example: DD-MM-YYYY, YYYY-MM, YYYY-DD-MM hh,
DD-MM-YY hh:mm:ss, etc. fff means milliseconds. In case you use miliseconds, you must provide the
3 digit number -->
<date_format>YYYY-MM-DD</date_format>发布于 2011-10-15 14:35:54
amStock不支持28-Jul-11格式的日期。您需要构建一个服务器端代理脚本,将所有日期转换为某种受支持的格式,如2011-07-28。
下面是一个用PHP编写的代码:
<?php
// get input data (replace with the actual data)
// i.e.: $input = file_get_contents('http://...........');
$input = "Date,Open,High,Low,Close,Volume
28-Jul-11,36.02,36.84,36.01,36.42,8870180
27-Jul-11,36.71,36.86,35.98,36.06,10395443
26-Jul-11,37.26,37.27,36.80,36.86,6366097";
// parse line by line
$lines = preg_split("/\r\n|\r|\n/", $input);
$cnt = sizeof($lines);
for ($i = 0; $i < $cnt; $i++) {
$cols = explode(',', $lines[$i]);
if ($date = strtotime($cols[0])) {
$cols[0] = date('Y-m-d', $date);
$lines[$i] = implode(',', $cols);
}
}
// output
header('Content-Type: text/csv');
echo implode("\r\n", $lines);
?>https://stackoverflow.com/questions/6866744
复制相似问题