用于转换/格式化时间的命令行工具

用于转换/格式化时间的命令行工具

是否有命令行工具来转换/格式化时间? (我指的是时间,不是日期!)

这是我所期待的:

$ 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

你有 GNU 软件单位(在许多 Linux 发行版中以软件包形式提供units)。

这是一个简单的运行来找出两周内的天数:

$ units "2 week" day
* 14
/ 0.071428571

联机帮助页详细解释了输入、输出、退出代码以及使用该命令的其他方式。

答案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 点后响起在夏令时调整时钟是一个坏主意。

相关内容