変数にタイムスタンプ値があり、その値から時間を切り捨てて別の時間を設定する必要があります。 GNU dateはこれを一度に行うことができますか? 「今日」、「明日」、「昨日」などの特別な日付については確かにこれを行いますが、任意のタイムスタンプで算術を使用することはできません。
$ date -d"tomorrow 10:05"
Thu Jul 23 10:05:00 2020
il@mar2 ~
$ date -d"yesterday 10:05"
Tue Jul 21 10:05:00 2020
$ date -d"@1595413447"
Wed Jul 22 13:24:07 2020
il@mar2 ~
$ date -d"@1595413447 10:05"
date: invalid date '@1595413447 10:05'
# desired: Wed Jul 22 10:05:00 2020
答え1
GNUはdate
タイムスタンプの追加指定を許可しません。
date
情報文書から:
数字の前に「@」がある場合は、内部タイムスタンプ(秒)を示します。数値には内部小数点(「.」または「、」)を含めることができます。内部表現でサポートされていない超過精度は負の無限大に切り捨てられます。 これらの数字は完全なタイムスタンプを指定するため、他の日付項目と組み合わせることはできません。
(強調は私のもの)
たとえば、2回呼び出す必要があるようです。
date -d "$(date -d @1595413447 +'%F 10:05')"
答え2
出力形式の一部としていつでも時間を指定できます。
$ date -d @1595413447 '%a %b %e 10:05:00 %Y'
Wed Jul 22 10:05:00 2020
または、シェルでより移植性が高くなります(GNUdate
依存関係の防止)ksh93
。
$ printf '%(%a %b %e 10:05:00 %Y)T\n' '#1595413447'
Wed Jul 22 10:05:00 2020
また、以下をサポートしていますがksh93
:
$ printf '%(%a %b %e %T %Y)T\n' '#1595413447 10:05'
Wed Jul 22 10:05:00 2020
またはzsh
シェルから:
$ zmodload zsh/datetime
$ strftime '%a %b %e 10:05:00 %Y' 1595413447
Wed Jul 22 10:05:00 2020
またはbash
シェル(フォーマット用にコピーbash
されたが日付解析用にコピーされていません):ksh93
printf %T
$ printf '%(%a %b %e 10:05:00 %Y)T\n' 1595413447
Wed Jul 22 10:05:00 2020