シェルスクリプトで年パラメータなしで日付を比較するには?

シェルスクリプトで年パラメータなしで日付を比較するには?

Linuxには次のログファイルがあります。

Mar  2 09:46:45 [rest of the log]

Debian Linuxの多くのサービスログには年情報が含まれていないため、私の考えでは、ログは最近のイベントを示唆しているようです。

このログ行が最後の10分かどうかを確認したいので、次のようにしました。

Now="$(date '+%b %d %H:%M:%S')"
echo "Now : $Now"

TENMINSEC=$(date -d 'now - 10 minutes' '+%s')
echo "Ten min before : ${TENMINSEC}"

LOGDAT=$(date -d 'Mar  2 09:45:40' '+%s')
echo "LOGDAT : ${LOGDAT}"

if [ $LOGDAT -ge $TENMINSEC ];then 
    echo "Log date is greater"; 
fi

LOGDATと最近10分を秒に変換して比較します。

しかし、私が望むことをしているのは混乱していますか?年情報が含まれていない場合、結果に影響はありませんか?どうすれば解決できますか?

添付:

ログファイル行の読み込みに問題はありません。ログファイルから読み取った内容は、コードの日付(3月2日09:45:40)に置き換えられます。

答え1

日付文字列に年が指定されていない場合、GNU date(使用中のように見える)は日付が現在の年を参照していると仮定します。

$ date -d 'Mar  2 09:45:40'
Sat Mar  2 09:45:40 CET 2019

したがって、この日付をUnix時間に変換して同じ形式の他の日付と比較することは、新年の前日が真夜中であることを除いて正しいことを行います。

答え2

特定の日付に対してdateコマンドが生成する内容がわからない場合は、いつでも試してみることができます。この特定の場合は、削除して+%s結果を読み取ることができます。

date -d 'Mar 2 09:45:40'    # "02 Mar 2019 09:45:40"

あるいは、epochの後の秒数が与えられたら、値を再読み込み可能な日付に変換することもできます。

time=1546300800
date --date "@$time"        # "01 Jan 2019 00:00:00"

関連情報