2017-11-29 24 views
0

私は、特定の時間範囲のシェルスクリプトに正しい日付を入れる方法について少し苦労しています。日付の異なる2つの日付の間のシェルスクリプト

workflow_start_time=$(date -d "$(date +%Y-%m-%d) 23:00:00" +"%s") 
    scheduled_run_time=$workflow_start_time 

if [ "$(date -d @${scheduled_run_time} +"%H")" -ge 23 ] && [ "$(date -d @${scheduled_run_time} +"%H")" -lt 2 ]; then 

23から開始されている。これまでのところ、私はチェックしてる - (午前3時午前12時)

例えば は私が日付に基づいていくつかのファイルを生成するために、正しい範囲にいるかどうかを確認する必要があります私は1時間のサーバーの違いを考慮に入れる必要があるので、これは約12を開始し、午前2時頃に完了する必要があります。午前3時です。

ここにヘルプがありますか?

+0

unixタイムスタンプとチェックに変換できませんか? –

答えて

0

日付をタイムスタンプに変換します。

toStamp() { date --date="$1" +%s; } 

日付が他の日付の間にあるかどうかを確認します。

# [$1, $2): bounds 
# $3 current date 

isBetween() { 
    [[ `toStamp $1` -le `toStamp $3` ]]&&\ 
    [[ `toStamp $2` -gt `toStamp $3` ]] 
} 

または

isTimeStampBetween() { 
    [[ $1 -le $3 ]]&&\ 
    [[ $2 -gt $3 ]] 
} 

あなただけのタイムスタンプを持っている場合。

日は、他の2の間にあるかどうかを確認する例は次のようになります。

if $(isBetween 2012 2020 2013) ; then dosomething 

あなたはあなたのファイルでこれらの関数を含めることができます。

+0

私はすでにタイムスタンプを持っていると思います – ennon

+0

あなたはそうですが、これはより一般的な変換方法です。ですから、私はisBetween関数をこの特殊なケースに従って書き換えます。ここでは、タイムスタンプのみを使用します。 – ntj

+0

isTimeStampBetweenを参照してください。 – ntj

関連する問題