繁体   English   中英

Java 8 - Hashmap无法找到并返回ZonedDateTime值

[英]Java 8 - Hashmap cannot find and return a ZonedDateTime value

我正在开发一个示例项目,我们需要在Hashmap中存储一些值并通过REST服务获取它们。

将数据发布为

{"timestamp":"2015-09-01T16:40:00.000Z", "temperature":"27.2"}

保存方法:

@PostMapping
public ResponseEntity<?> createCalc(@Valid @RequestBody Calc calc) {
   store.add(measurement);
}
...

商店课程

private HashMap<ZonedDateTime, Calc> calcHashMap;
...
public void add(Calc calc) {
  calcHashMap.put(calc.getTimestamp(), calc);
}

保存后我们想从Hashmap获取数据,以下都不能找到它。

http://localhost:8000/measurements/2015-09-01T16:40:00.000Z
or 
http://localhost:8000/measurements/2015-09-01T16:40Z

我们使用的方法是

  @GetMapping("/{timestamp}")
  public ResponseEntity<Calc> getCalc(@PathVariable ZonedDateTime timestamp) {

  Calc calc = process.fetch(timestamp);

Process.java类

 public Calc fetch(ZonedDateTime timestamp) {
    return calcMap.get(timestamp);
 }

将其添加到Hashmap和时间戳作为键。 我们看到了这些差异:

  1. 使用System.out.println 2015-09-01T16:40Z在控制台中打印值时
  2. 从POSTMAN中的REST GET方法返回显示2015-09-01T16:40:00Z
  3. 而实际值为2015-09-01T16:40:00.000Z

我需要找到商店时间戳并返回对象,但由于上述差异而未找到。 怎么解决这个?

经过一些研究,我能够解决这个问题如下

for (ZonedDateTime zdt : measurementHashMap.keySet()) {
  if (timestamp.toInstant().compareTo(measurementHashMap.get(zdt).getTimestamp().toInstant()) == 0) {
     return measurementHashMap.get(zdt);
  }
}

选项2:还有另一个选项可以将ZonedDateTime转换为OffSetDate然后进行比较。 参考: https//rextester.com/SIIIW97667

Calc类中,您可以使用Jackson库中的@JsonFormat并提供所需的模式。 在这种情况下,“yyyy-MM-dd'T'HH:mm:ss.SSSX”。 另外,我建议你直接使用OffsetDateTime而不是转换。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM