从日期中删除分钟作为变量

从日期中删除分钟作为变量

我正在 KSH 中编写一个脚本,需要您的帮助来找到从日期中删除分钟和秒的逻辑。如果用户将 2024-12-22-16-43-40 传递给变量,则应将其转换为 2024-12-22-16-00-00。

答案1

在包括 ksh 在内的任何 POSIX shell 中(POSIX sh 规范实际上基于 ksh(其子集),并且扩展到从其末尾匹配的最短字符串的 stripped${var%pattern}值的运算符实际上是由 ksh 在 80 年代早期引入的) :$varpattern

$ date=2024-12-22-16-43-40
$ printf '%s\n' "${date%-*-*}-00-00"
2024-12-22-16-00-00

在这里,您想要执行的字符串操作多于日期操作,但请注意,内置printfksh93可以执行后者。然而,2024-12-22-16-43-40 格式并不属于它默认支持的时间戳格式。

DATEMSK但是,您可以使用标准环境变量指定其他时间戳格式。

$ echo '%Y-%m-%d-%H-%M-%S' > timefmt
$ export DATEMSK="$PWD/timefmt"
$ printf '%(%F-%H-00-00)T\n' "$date"
2024-12-22-16-00-00

答案2

像这样的东西:(将其视为文本字符串)

#!/bin/ksh
d="2024-12-22-16-43-40"
s="$(echo "$d" | cut -d- -f1-4 )"
t="${s}-00-00"
echo "$t"

或者,将其视为“日期/时间”,读取man datedate解析您的日期,然后通过 `date +"%Y-%m-%d-00-00" 输出它

相关内容