编写公式以将SQL时间值转换为纪元时间,然后将其与今天的日期一起使用来计算以天为单位的时差。我想用一个bashline命令来做这个。
首先,修剪SQL时间码:
x_new
= 40021
然后转换为纪元时间:
printf "%.*f\n" 0 40020.7278236459
= 1248652800
上述结果现在将与当前纪元时间日期一起使用,该时间日期由以下公式计算:
echo "(40021 - 25569) * 86400" | bc
= 1509720642
所以,如果1509720642 - 1248652800 = 261067842,您可以将此差异除以86400以获得解决方案,即天数:
date +%s
= 3021
现在,您如何使用一个bashline公式完成所有这些操作?
答案 0 :(得分:1)
这是令人发指的,但它确实有效。您可以使用expr
来评估表达式并将命令包装在$()
中以执行它们。
expr $(expr $(date +%s) - $(echo "($(printf "%.*f\n" 0 40020.7278236459) - 25569) * 86400" | bc)) / 86400
我更愿意使用多行来清楚地表达脚本。
答案 1 :(得分:1)
一种方法(在bash
中),通过(或多或少)字面翻译您的算法:
result=$(( ($(date +%s) - ($(printf "%.0f\n" 40020.7278236459) - 25569) * 86400) / 86400 ))
并使用arithmetic expansion $((..))
进行整数运算,使用command substitution $(..)
来捕获(子)命令的输出。
我们可以将它包装在一个函数中:
conv() { echo $(( ($(date +%s) - ($(printf "%.0f\n" "$1") - 25569) * 86400) / 86400 )); }
并使用它:
$ conv 40020.7278236459
3031
答案 2 :(得分:0)
您的解决方案的以下命令行怎么样,
$ _SQL_TIME=40020.7278236459; echo "( $(date '+%s') - (( $(( $(echo ${_SQL_TIME} | awk '{ printf "%.f\n", $1}') - 25569 )) ) * 86400) ) / 86400" | bc
我希望这会对你有所帮助。