轻松将毫秒转换为 hh:mm:ss
painless to convert miliseconds to hh:mm:ss
在我的索引中,我有一个名为 build duration
的字段,类型为 string
,因为我想在折线图 Y-axis
中可视化 build_duration 的 average
我想 select Average
但如果我 select 它显示 The index pattern build-info does not contain any of the following compatible field types: number or histogram
因此,出于这个原因,我希望创建脚本字段来计算平均构建持续时间。目前它以毫秒为单位 ("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 字段结果。
也许我遗漏了什么,但 duration 和 timepoint.[=16= 之间似乎有些混淆]
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[]
语法
在我的索引中,我有一个名为 build duration
的字段,类型为 string
,因为我想在折线图 Y-axis
中可视化 build_duration 的 average
我想 select Average
但如果我 select 它显示 The index pattern build-info does not contain any of the following compatible field types: number or histogram
因此,出于这个原因,我希望创建脚本字段来计算平均构建持续时间。目前它以毫秒为单位 ("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 字段结果。
也许我遗漏了什么,但 duration 和 timepoint.[=16= 之间似乎有些混淆]
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[]
语法