【问题标题】:Java, converting epoch to millisecondsJava,将纪元转换为毫秒
【发布时间】:2013-11-11 17:30:28
【问题描述】:

我的浮点图没有显示任何线条,在 Java 中使用 Integer 将 epoch 乘以 1000 有问题吗?
这是我的原始数据,存储在.txt 文件中

epoch,value
1383229104,55559
1383229121,55559
1383229787,55565

由 Servlet 解析并存储在里面:

Vector<Integer> points = new Vector<Integer>();

例如

points.add(Integer.parseInt(strLine.split(",")[0]) * 1000);
points.add(Integer.parseInt(strLine.split(",")[1]));

有多个文件,每个文件都包含要在图表上绘制的单独系列(线)。
对于每个 Vector&lt;Integer&gt; points 对象,它们被添加到 ..

Vector<Dataset> datasets = new Vector<Dataset>();

数据集有如下定义:

public class Dataset {

    private String name;
    private Vector<Vector<Integer>> points;

一旦所有文件都被解析并添加到Vector&lt;Dataset&gt; datasets,这个对象就会使用response.getWriter().write(new Gson().toJson(datasets));发送到客户端
并使用

“绘制”
var datasets = JSON.parse(xmlhttp.responseText);

    var plotarea = $("#placeholder");
    $.plot(plotarea, [datasets[0].points, datasets[1].points, datasets[2].points, datasets[3].points, datasets[4].points], {
        xaxis: {
            mode: "time",
            min: (new Date(2012, 0, 1)).getTime(),
            max: (new Date(2015, 0, 1)).getTime()
        }
    });

更新: -------------------------------------------------- ------------------------------------
在 javascript 中调试输出。
有 5 个文件被加载到Vector&lt;Dataset&gt; datasets = new Vector&lt;Dataset&gt;();

alert(datasets) .. [object Object],[object Object],[object Object],[object Object],[object Object]
console.log(datasets) .. [object Array]

我可以使用以下方法访问值:

alert(datasets[0].points[0][0]);
alert(datasets[0].points[0][1]);

输出将是两个警报对话框,一个包含249634688,第二个包含55559
注意: 1383229104 * 1000 不应为249634688

【问题讨论】:

  • 你能告诉我们console.log(datasets)的输出吗?
  • 更新了来自console.log(datasets)alert(datasets)输出的描述

标签: java javascript time epoch integer-overflow


【解决方案1】:

您应该使用 Long,而不是 Integer。显然这是一个溢出问题。

【讨论】:

    【解决方案2】:

    private Vector&lt;Vector&lt;Integer&gt;&gt; points; 更改为private Vector&lt;Vector&lt;Long&gt;&gt; points;
    导致预期结果,即1383229104000

    【讨论】:

    • 你可以从问题中看到alert(datasets[0].points[0][0]);输出249634688,因为epoch被乘以1000并存储在Integer对象中,该对象无法处理如此大的值。
    猜你喜欢
    • 2015-07-07
    • 2012-03-08
    • 1970-01-01
    • 2020-05-05
    • 1970-01-01
    • 1970-01-01
    • 2013-08-19
    • 1970-01-01
    • 2020-12-04
    相关资源
    最近更新 更多