![填充日期/时间值以确保 3 位数长度](https://linux22.com/image/18651/%E5%A1%AB%E5%85%85%E6%97%A5%E6%9C%9F%2F%E6%97%B6%E9%97%B4%E5%80%BC%E4%BB%A5%E7%A1%AE%E4%BF%9D%203%20%E4%BD%8D%E6%95%B0%E9%95%BF%E5%BA%A6.png)
我有一个脚本,它以 YYYY'DDD'TTT 格式呈现时间戳,其中 Y = 年,D = 365 中的天,T = 一天中第 1000 天的时间:
#!/bin/bash
clear
s=$(($(date +"%H*3600+%M*60+%S")))
t=$(($s * 5 / 432))
d=$(date +%j)
y=$(date +%Y)
printf "$y\`$d\`$t" "$y" "$d" "$t"
但我需要修改它,以便 D 和 T 始终生成三个字符的值(即,1 月 1 日用“001”代替“1”,当天第一分钟用“001”代替“1”) - 我不知道怎么办。
非常感谢任何帮助
答案1
也许您可以看一下printf
格式字符串。第一个参数printf
应该是一个格式字符串,其中包含后面每个参数的占位符。
您可以包含%d
以有符号十进制格式表示的参数,并且可以为零填充字符添加d
前缀。0n
n
printf "%d/%d/%d" 2011 2 3
会输出2011/2/3
printf "%04d/%03d/%05d" 2011 2 45
应该输出 2011/002/00045
答案2
让我们date
开始工作吧!
date +%3j
然后,对于毫秒部分,一个简单的技巧是计算 1000 加上毫秒数并去掉前导1
。所以对于你的脚本:
s=$(($(date +"%H*3600+%M*60+%S")))
t=$(($s * 5 / 432 + 1000))
date "+%Y'%3j'${t#1}"