我如何将 jenkins Build Duration 从毫秒转换为 hr:min:sec
Posted
技术标签:
【中文标题】我如何将 jenkins Build Duration 从毫秒转换为 hr:min:sec【英文标题】:How can i convert jenkins Build Duration from milliseconds to hr:min:sec 【发布时间】:2018-07-17 10:04:05 【问题描述】:我可以通过 curl 使用 Rest API 获取 jenkins 构建持续时间,但时间以毫秒为单位。
curl -s "$JOB_URL/$BUILD_NUMBER/api/json?tree=duration
我正在寻找一种以标准格式获取时间的方法,即 hr:min:sec 我试过这个到现在
curl -s "$JOB_URL/$BUILD_NUMBER/api/json?tree=duration | awk -F : ' print $2 ' | awk -F ' printf "%i hr %i min %i sec", ($1 / 3600000), ($1 % 3600000)/60000 , ($1 % 100)'
这绝对不正确,因为 URL 以毫秒为单位提供的时间是 417597
,但它以 hr:min:sec 为 0 hr 6 min 97 sec
curl -s $JOB_URL/3458/api/json?tree=duration
"duration":417597
curl -s $JOB_URL/3458/api/json?tree=duration | awk -F : ' print $2 ' | awk -F ' printf "%i hr %i min %i sec", ($1 / 3600000), ($1 % 3600000)/60000 , ($1 % 100)'
0 hr 6 min 97 sec
分钟和小时的转换是正确的。 我被困在秒数转换中 有人可以建议这里有什么问题。 提前致谢。
【问题讨论】:
欢迎来到 Stack Overflow,您能否在您的帖子中使用 CODE TAGS 发布curl
命令的输出?将有助于我们帮助你,干杯:)
编辑了问题..:)
【参考方案1】:
echo 417597 | awk '
t_sec = int($0/1000)
divmod(t_sec, 60); t_min = Q; sec = R
divmod(t_min, 60); hr = Q; min = R
printf "%s hr %s min %s sec\n", hr, min, sec
function divmod(a, b) # quotient and remainder
Q = int(a / b)
R = a - Q * b
'
返回
0 hr 6 min 57 sec
【讨论】:
【参考方案2】:从持续时间的值,你可以简单地计算 groovy 中的值:D
时髦
def duration = 635309
// Roud the hour
double hour = Double.valueOf((duration / 3600000)).round()
def hourStr = hour > 0 ? " $hourh" : ""
// Handle minute parts
double totalMin = Double.valueOf((duration % 3600000)/60000).round(2)
def realMin = "$totalMin".split("\\.")
def min = Integer.valueOf(realMin[0])
def minStr = Integer.valueOf(min) > 0 ? "$minmin" : ""
// Handle the reminder of seconds
def realSec = realMin[1]
double secVal = Double.valueOf("0.$realSec") * 60
def sec = "$secVal".split("\\.")[0]
sec = Integer.valueOf(sec) > 0 ? "$secsec" : ""
println "Duration is Build time$hourStr $minStr $sec"
执行
持续时间是构建时间 10 分 35 秒
【讨论】:
以上是关于我如何将 jenkins Build Duration 从毫秒转换为 hr:min:sec的主要内容,如果未能解决你的问题,请参考以下文章