字符串中的即时数组



我有一个ArrayList,我想它的类型是Instant,但无论我对数组做什么,它都不允许我将其转换为Instant格式。错误在于它试图将一个字符串添加到实例的ArrayList中。

@Data
@RequiredArgsConstructor
@AllArgsConstructor
public static class LiveData {
private final String location;
private final String metric;
private Double data = null;
private Instant timestamp = null;
}
private void onConnectionOpened() {
try {
int i = 0;
final List<Sensor> sensors = clientConnection.querySensors().get();
final List<String> metric = sensors.stream().map(sensor -> sensor.getLocation()).collect(Collectors.toList());
final List<String> location = sensors.stream().map(sensor -> sensor.getMetric()).collect(Collectors.toList());
List<Instant> timestamps = new ArrayList<>();
List<Instant> times = new ArrayList<>();
List<Double> datavalues = new ArrayList<>();
while (i < sensors.size()) {
final DataPoint data = clientConnection.queryValue(new Sensor(location.get(i), metric.get(i))).get();
timestamps.add((Util.TIME_FORMAT.format((new Date(data.getTime()).toInstant()))));
datavalues.add(data.getValue());
i++;
}
i = 0;
List<LiveData> testcol = new ArrayList<>();
while (i < sensors.size()) {
//LiveData temporary = new LiveData(location.get(i), metric.get(i));
LiveData temporary = new LiveData(location.get(i), metric.get(i), datavalues.get(i), timestamps.get(i));
testcol.add(temporary);
i++;
}
ObservableList<LiveData> livedata = FXCollections.observableArrayList(testcol);
Platform.runLater(() ->
tvData.setItems(livedata));
//Thread.sleep(10000);
//onConnectionOpened();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}

我希望能够拥有即时数组列表,然后像这样使用它:

LiveData temporary = new LiveData(location.get(i), metric.get(i), datavalues.get(i), timestamps.get(i));

供以后在TableView中使用。

我正在格式化Instant对象。我使用这种格式是为了更好地输出实际时间戳,因为现在它看起来是这样的:2019-07-18T05:35:00Z。我希望是2019-07-18 07:35:00。

假设data.getTime()返回一个long,您只需要

timestamps.add(Instant.ofEpochMilli(data.getTime()));

不需要混合使用旧的、设计糟糕的Date类,这只会使事情不必要地复杂化。尝试格式化没有用。Instant不能有格式。

没有完整的上下文还不完全清楚,但可能Util.TIME_FORMAT.format()返回了一个String,所以您试图将这个String添加到您的列表中,这导致了您提到的错误消息:

错误在于它试图将字符串添加到瞬间。

在您的评论中,您说:

我使用这种格式是为了更好地输出实际时间戳,因为现在它看起来像这样:2019-07-18T05:35:00Z。和我希望它是2019-07-18 07:35:00

对不起,这是错误的。在除了最简单的一次性程序之外的所有程序中,您都应该将模型和UI分开。Instant对象属于您的模型。你的好输出——当然你应该有一个好输出,只是它属于你的用户界面。因此,您想要和需要做的是在输出Instant之前对其进行格式化(而不是在将其放入列表之前(。我重复一遍:Instant不能有格式。

相关问题,仅询问现已过时的Date,格式为:

  • 以特定格式显示Java.util.Date
  • 希望当前日期和时间为"dd/MM/yyyy HH:MM:ss.ss"格式。我试着在这里写一个详尽的答案

相关内容

  • 没有找到相关文章

最新更新