如何将datetime字符串转换为UTC以在Highcharts上绘制点

pyt*_*der 5 python highcharts

我正在研究HighCharts样条不规则数据.这里数据传递为

data: [
      [Date.UTC(1970,  9, 27), 0   ],
      [Date.UTC(1970, 10, 10), 0.6 ],
      [Date.UTC(1970, 10, 18), 0.7 ],
      [Date.UTC(1970, 11,  2), 0.8 ],
      [Date.UTC(1970, 11,  9), 0.6 ],
      [Date.UTC(1970, 11, 16), 0.6 ],
      ]
Run Code Online (Sandbox Code Playgroud)

但是,我是通过AJAX调用从python后端发送数据的

data: [
      "2013-11-07 00:10:27", 0   ],
      "2013-11-07 00:10:27", 1   ],
      "2013-11-07 00:10:27", 2   ],
      "2013-11-07 00:10:27", 3   ],
      "2013-11-07 00:10:27", 4   ],
      "2013-11-07 00:10:27", 5   ],
      ]
Run Code Online (Sandbox Code Playgroud)

因此,数据点不会被绘制.如何将日期时间转换为UTC或后端(python)的任何其他日期时间格式,这将使Highcharts能够绘制正确的X和Y轴点.

这是我尝试过的.由于UTC时间Date.UTC(1970, 9, 27)返回秒数,因此我将时间转换为自幕后1970-1-1以来经过的总秒数.

time = "2013-11-06 18:00:00"
time = ((datetime.datetime.strptime(time, '%Y-%m-%d %H:%M:%S'))-datetime.datetime(1970,1,1)).total_seconds()            
Run Code Online (Sandbox Code Playgroud)

然后将其传递给UI.因此我的数据发送为

[[1383760800.0, 1870.2000000000007], [1383762600.0, 0.30000000000000004], [1383761700.0, 4.299999999999802]]

现在,当我将此数据传递给高等图时,Y轴显示正确的值,但X轴(绘制日期时间所需的时间)显示时间为05:52.

我该如何纠正?

这是我的Highcharts代码.

function comparison_chart(result) {
  var MAXPOINTS = 20;

  Highcharts.setOptions({
      global: {
          useUTC: false,
      }
  });

$('#container').highcharts({
    chart: {
      events: {
      load: function() {

          // set up the updating of the chart each second
          var series = this.series[0];


          setInterval(function() {
              var x = (new Date()).getTime(), // current time
                  y = Math.random();
              if(series.data.length > MAXPOINTS){
                series.addPoint([x, y], true, true);  
              }
              else{
                series.addPoint([x, y], true, false);
              }



          },5000);
      },
  }

    },
    title: {
        text: 'Energy Chart'
    },
    xAxis: {
        type: 'datetime',
        dateTimeLabelFormats: { // don't display the dummy year
            month: '%e. %b',
            year: '%b'
        }
    },

    tooltip: {
        formatter: function() {
            var s;
                s = this.y + 'kWh';
            return s;
        }
    },

    series: [{
        type: 'spline',
        name: 'Random data',
        data: result,
        showInLegend: true,

    }]
  });
}
Run Code Online (Sandbox Code Playgroud)

sbe*_*rry 11

问题是HighCharts期望以毫秒而不是秒为单位给出时间序列数据,因此您需要输入乘数1000.

你可以从你的字符串转换为毫秒,因为epoch像这样:

>>> int(datetime.datetime.strptime("2013-11-07 00:10:27", "%Y-%m-%d %H:%M:%S").strftime('%s')) * 1000
1383811827000
Run Code Online (Sandbox Code Playgroud)