GNU Date:提供された日付/時刻を切り捨て、提供された時間を設定します。

GNU Date:提供された日付/時刻を切り捨て、提供された時間を設定します。

変数にタイムスタンプ値があり、その値から時間を切り捨てて別の時間を設定する必要があります。 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されたが日付解析用にコピーされていません):ksh93printf %T

$ printf '%(%a %b %e 10:05:00    %Y)T\n' 1595413447
Wed Jul 22 10:05:00    2020

関連情報