Время данных из файла CSV для построения графика в ошибке Highstock JS - PullRequest
0 голосов
/ 26 марта 2019

Я пытаюсь отобразить график исторических курсов акций компаний в моем веб-приложении с использованием Highcharts stockChart.Временная метка с данными о ценах на акции загружается из файла CSV.Проблема, с которой я сталкиваюсь, связана с преобразованием даты и времени.В файле CSV есть только дата в виде строк из 5 лет ежедневно.Эту строку я преобразую в объект datetime с помощью strptime () и преобразую его в метку времени, которая будет отправлена ​​в качестве параметра для stockChart в javascript.Но проблема в том, что CSV-файл содержит ежедневные даты 2014–2019 годов, но на графике после преобразования он показывает только два дня в 1970 году.в часовые пояса.

Базовый код Python (функция Django views.py)

csvFile = company + ".csv"

        file = open(csvFile)
        reader = csv.reader(file)
        data = list(reader)
        prices = []
        for row in data:
            temp = []
            temp.append(datetime.timestamp(datetime.strptime((row[0]) + " 09:30:00 +0000", '%Y-%m-%d %H:%M:%S %z')))
            temp.append(float(row[1]))
            prices.append(temp)

        arg = {'symbol':company, 'prices':prices}
        return render(request, 'history.html', arg)

Код JavaScript

<script type="text/javascript">

// Create the chart
Highcharts.stockChart('container', {

  time: {
    useUTC: false
  },

  rangeSelector: {
    buttons: [{
      count: 7,
      type: 'day',
      text: '1W'
    }, {
      count: 1,
      type: 'month',
      text: '1M'
    }, {
      count: 6,
      type: 'month',
      text: '6M'
    }, {
      count: 1,
      type: 'year',
      text: '1Y'
    }, {
      count: 2,
      type: 'year',
      text: '2Y'
    }, {
      type: 'all',
      text: 'All'
    }],
    inputEnabled: true,
    selected: 1
  },

  title: {
    text: 'Historical Stock prices'
  },

  exporting: {
    enabled: true
  },

  series: [{
    name: "{{ symbol }}",
    data: {{ prices }},
    tooltip: {
                valueDecimals: 2
            }
  }]
});

</script>

Файл CSV имеет даты 2014-2019 [CSV file[1

Но на графике показаны только два дня 1970 года.[But the graph shows only 1970 year[2

Я предполагаю, что это проблема с преобразованием даты и времени в метку времени.Может ли кто-нибудь помочь мне здесь?

1 Ответ

1 голос
/ 26 марта 2019

Highcharts использует время в миллисекундах с 1970 года в качестве единственной единицы времени и даты.

Это означает, что ваш код

datetime.timestamp(datetime.strptime((row[0]) + " 09:30:00 +0000", '%Y-%m-%d %H:%M:%S %z'))

долженreturn миллисекунды , а не секунд .

Самое простое решение - это просто сделать:

datetime.timestamp(datetime.strptime((row[0]) + " 09:30:00 +0000", '%Y-%m-%d %H:%M:%S %z'))*1000

В этом ответе есть несколько других способов преобразования даты и времени в миллисекунды в зависимости от используемой версии Python.

Ваш массив готовых цен должен выглядеть следующим образом:

[
  [1553588587236, 38.84],
  [1553588588236, 31.31],
  ...
]
...