【问题标题】:painless to convert miliseconds to hh:mm:ss轻松将毫秒转换为 hh:mm:ss
【发布时间】:2021-05-09 15:12:37
【问题描述】:

在我的索引中,我有一个名为 build duration 和 string 类型的字段,因为我想在折线图 Y-axis 中可视化 build_duration 的 average 我想选择 Average 但如果我选择它会显示 @ 987654330@ 因此,我希望创建脚本字段来计算构建持续时间平均值。目前以毫秒为单位 ("build_duration" => "6409651") 需要帮助才能转换为 HH:mm:ss 格式。已尝试以下 但它不工作。那么有人可以帮我解决这个问题吗?任何帮助将不胜感激。

脚本:

String millisecondsString = doc['build_duration.keyword'].value;
long milliseconds = 1000000;
long minutes = (milliseconds / 1000) / 60;
long seconds = (milliseconds / 1000) % 60;
ZoneId z = ZoneId.of("Z");
Instant instant = Instant.ofEpochMilli(milliseconds);
LocalDateTime l = LocalDateTime.ofInstant(instant, z);
return l;

预览结果

[
 {
  "_id": "37361323",
  "build_duration": "1062735",
  "test": [
   "1970-01-01T00:16:40.000Z"
  ]
 },
 {
  "_id": "37200499",
  "build_duration": "1446172",
  "test": [
   "1970-01-01T00:16:40.000Z"
  ]
 },

Kibana Discover 字段结果。

【问题讨论】:

  • 您的instant 是如何定义的?似乎我们在这里遗漏了一些东西
  • 目前它采用这种格式"build_duration" => "6409651"
  • 我不是这个意思。 instant 来自哪里:LocalDateTime.ofInstant(instant, z);?
  • 抱歉我错过了 - Instant instant = Instant.ofEpochMilli(milliSinceEpoch);
  • 现在好了,milliSinceEpoch 定义在哪里?

标签: elasticsearch kibana elasticsearch-painless


【解决方案1】:

也许我遗漏了一些东西,但持续时间和时间点之间似乎有些混淆。

6409651ms 的持续时间等于1h 46m 49s。如果您将其解析为日期时间(时间点)并且没有提供 date,那么 ES 会将其放在纪元的开头(01.01.1970)。虽然您可以这样做,但考虑持续时间并将它们放在日期轴上有点不合理......

现在,如果您想“美化”毫秒持续时间(转换为 hh:mm:ss 格式),您可以使用以下脚本来实现:

String millisecondsString = "6409651";
long seconds = Long.parseLong(millisecondsString, 10) / 1000;
long s = seconds % 60;
long m = (seconds / 60) % 60;
long h = (seconds / (60 * 60)) % 24;

return String.format("%02d:%02d:%02d", new def[] { h, m, s });

顺便说一句,最后一行 comes from here 中奇怪的 new def[] 语法。

【讨论】:

  • 谢谢乔。是的,理想情况下它应该显示 hh:mm:ss 已尝试使用您的代码,对于 1062735ms 它显示 [ { "_id": "37361323", "build_duration": "1062735", "test": [ "7:12:15" ] },
  • 我的错——检查我的最后一次编辑。需要先将毫秒除以秒!
  • 添加了一个新的编辑,以便小时总是有 2 个字符。
  • 预览结果完美运行,但是在发现脚本字段中显示Invalid date。我错过了什么?
  • 那么结果是一个字符串,所以你的字段不能是一个日期......将其类型更改为字符串。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-20
  • 2022-11-28
  • 1970-01-01
  • 1970-01-01
  • 2018-07-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多