填充日期/时间值以确保 3 位数长度

填充日期/时间值以确保 3 位数长度

我有一个脚本,它以 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前缀。0nn

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}"

相关内容