Java Google图表xAxis必须包含日期时间

Java Google图表xAxis必须包含日期时间,java,datetime,charts,google-visualization,Java,Datetime,Charts,Google Visualization,我需要使用Google图表创建一个图表,其中xAxis表示日期时间,yAxis表示传感器的温度 我正在将它与Java相结合 这是我的密码: <script type="text/javascript"> google.load("visualization", "1", {packages:["corechart"]}); google.setOnLoadCallback(drawChart); function drawChart() {

我需要使用Google图表创建一个图表,其中xAxis表示日期时间,yAxis表示传感器的温度

我正在将它与Java相结合

这是我的密码:

<script type="text/javascript">
      google.load("visualization", "1", {packages:["corechart"]});
      google.setOnLoadCallback(drawChart);
      function drawChart() {
          var data = new google.visualization.DataTable();
            data.addColumn('datetime', 'Date');
            data.addColumn('number', 'Temperature');

        <%
          for ( MyDateTimeFormat key : hm.keySet() ) {
              out.print("data.addRow([new Date("+key.year+","+key.month+","+key.day+","+key.hour+","+key.minute+","+key.second+"), "+hm.get(key)+"]);"); 
          }%>

        var options = {
          title: '<% out.print(((ConfigItemTemperatureSensor)item).getId()+" P"+((ConfigItemTemperatureSensor)item).getPort()+((ConfigItemTemperatureSensor)item).getPin()+" "+((ConfigItemTemperatureSensor)item).getName()); %>'
        };

        var chart = new google.visualization.LineChart(document.getElementById('chart_div'));
        chart.draw(data, options);
      }
    </script>
结果是完全错误的:
查看填充图表数据的循环:

for ( MyDateTimeFormat key : hm.keySet() ) {
          out.print("data.addRow([new Date("+key.year+","+key.month+","+key.day+","+key.hour+","+key.minute+","+key.second+"), "+hm.get(key)+"]);"); 
      }%>
如果变量hm是一个hashmap,那么这将是无序的,这可能解释了为什么图表看起来如此


您可以将图表更改为散点图,或者在填充var数据之前对键集进行排序

要知道像HashMap这样的集合中元素的插入顺序是不可能的。如果你想知道这个顺序,你可以使用LinkedHashMap。就我而言,这门课解决了这个问题

LinkedHashMap与HashMap类似,唯一的区别是LinkedHashMap知道插入顺序


谢谢你,大卫·霍奇森

您还可以调用
data.sort(0)
对javascript中的数据进行排序。
for ( MyDateTimeFormat key : hm.keySet() ) {
          out.print("data.addRow([new Date("+key.year+","+key.month+","+key.day+","+key.hour+","+key.minute+","+key.second+"), "+hm.get(key)+"]);"); 
      }%>