是否有命令行工具来转换/格式化时间? (我指的是时间,不是日期!)
这是我所期待的:
$ timeconverter --format '%s' 1h
3600
$ timeconverter --format '%h:%m:%s' 3665s
1:01:05
$ timeconverter --format '%H:%m:%s' 3665s
01:01:05
$ timeconverter --format '%Hh%Mm%Ss' 3966s
1h5m6s
$ timeconverter --format '%m' 2d
2880
$ timeconverter --format '%d' 1w
7
$ timeconverter --format '%y' 365d
1
$ timeconverter --format '%s' 1h10m
4200
其中 %m 为分钟,%d 为日,%y 为年,%h 为小时,%s 为秒,%w 为周,依此类推。
我自己可以为其编写一个 shell 脚本,但很可能其他人已经这样做了,我想节省时间。
答案1
答案2
GNUdate
命令拥有您似乎想要的大部分内容。您可以定义 analias
来使您想要的命令更短。
对于下面的示例,我定义了此别名以在您的一些示例中使用:
alias timeconverter='date -u -d "1970-01-01 + '
因此,使用您的原始列表,这里有各种可能性(有些也units
按照其他答案中的建议使用)
$ timeconverter --format '%s' 1h 3600
$ date -u -d "1970-01-01 01:00" +%s
3600
$ date -u -d "1970-01-01 + 1 hour" +%s
3600
$ units -t "1 hour" seconds
3600
$ timeconverter 1 hour" +'%s'
3600
$ timeconverter --format '%h:%m:%s' 3665s 1:01:05
$ date -u -d "@3665" +'%-k:%M:%S'
1:01:05
$ units "3665 seconds" time
1 hr + 1 min + 5 sec
$ timeconverter 3665 seconds" +'%-k:%M:%S'
1:01:05
$ timeconverter --format '%H:%m:%s' 3665s 01:01:05
$ date -u -d "@3665" +'%H:%M:%S'
01:01:05
$ date -u -d "@3665" +'%T'
01:01:05
$ date -u -d "1970-01-01 + 3665 sec" +'%H:%M:%S'
01:01:05
$ date -u -d "1970-01-01 + 3665 seconds" +'%H:%M:%S'
01:01:05
$ timeconverter 3665 seconds" +'%H:%M:%S'
01:01:05
$ timeconverter --format '%Hh%Mm%Ss' 3966s 1h5m6s
$ date -u -d "@3966" +'%-kh%-Mm%-Ss'
1h6m6s
$ timeconverter --format '%m' 2d 2880
$ echo $(( $(date -u -d "1970-01-01 + 2 days" +'%s') / 60 ))
2880
$ timeconverter --format '%d' 1w 7
$ echo $(( $(date -u -d "1970-01-01 + 1 week" +'%s') / 60 / 60 / 24 ))
7
$ timeconverter --format '%y' 365d 1
$ echo $(( $(date -u -d "1970-01-01 + 365 days" +'%Y') - 1970 ))
1
$ timeconverter --format '%s' 1h10m 4200
$ date -u -d "1970-01-01 + 1 hour 10 min" +'%s'
4200
答案3
不要以为已经有成熟的命令行工具可以做到这一点。主要原因可能是这样做可能会带来很多陷阱,因为人类时间并不是非常......线性的。
示例:您想知道未来 2 年有多少分钟。这个数字取决于 2022 年或 2023 年是否为闰年。
如果您真的只想使用“标准”单位(即忽略现实):
我可能不会将其实现为 shell 脚本,而是将其实现为一个非常小的/usr/bin/env python3 -I -S
脚本,它将输入参数转换为秒,然后在计算所需的整数除法和模数之后,将格式字符串传递给字符串格式化函数。您可能想要输出的所有潜在字段。
无论如何,让我重复一遍:您可能想要这样做有一些但不是很多的充分理由。一般来说,如果您不知道结果的用途,时间段的转换就会变得危险;打印“你的闹钟将在 600 分钟后响起”,而实际上它会在上午 8 点 9 点后响起后在夏令时调整时钟是一个坏主意。