日付から分を変数として削除

日付から分を変数として削除

私はKSHでスクリプトを書いているので、日付から分と秒を削除するロジックを見つけるのに役立ちます。ユーザーが2024-12-22-16-43-40を変数に渡すと、2024-12-22-16-00-00に変換する必要があります。

答え1

kshを含むすべてのPOSIXシェルでは、(POSIX sh仕様は実際にはksh(そのサブセット)に基づいています)、最後${var%pattern}に一致する最も短い文字列の削除された値に拡張する演算子は、実際に80年代初頭にkshによって発明されました。 。はじめに):$varpattern

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

ここでは、日付演算よりも多くの文字列演算を実行したいのですが、組み込み機能が後者を実行できることprintfに注意してください。ksh93ただし、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"

または、「日付/時刻」として処理し、日付を読み取って解析し、 `date +"%Y-%m-%d-00-00"で出力しますman datedate

関連情報