Linuxでの2つの日付の違い

Linuxでの2つの日付の違い

私が取得する日付形式は次のとおりです。

    v_date=$(date +"%Y%m%d" -d "1970-01-01 + $(stat -c '%Z' file ) secs")
    v_sysdate=$(date +%Y%m%d)
echo "$v_date"

20150907

echo "$v_sysdate"

20150907

v_date_difference=$((${v_sysdate}-${v_date}))
echo "$v_date_difference"

返される値は-20150907ですが、ゼロでなければなりません。

日中の日付の違いを求める方法は?

ベストアンサー1

YYYYMMDD形式で作成された2つの日付は減算できません。たとえば、20150907 - 20140907これは明らかに365ではなく10000を生成します。

20150907 - 201509070を計算します。これは、減算を計算する代わりに直接同等性をテストできることを除いて、同等性をテストする有効な方法です。このメッセージを受け取った場合、-20150907これはコードが表示するものとは異なり、追加のv_sysdate文字(スペースや数字を除く)が含まれているためです。

日付を操作する合理的な方法は、日付を単純な数値形式に変換することです。連帯)。内部にUnixの世界、標準単位は秒(SI)、エポックは1970-01-01です。

などのGNUユーティリティは、この形式でエポック以降の日付を秒単位で印刷dateします。きれいに印刷するまでこの形式を使用してください。この形式で日付を渡すには、日付の前に秒を入力してください。stat%sdate@

v_date=$(stat -c '%Z' file)
v_sysdate=$(date +%s)
v_date_difference=$((v_sysdate-v_date))
date -d "@$v_date" +'File ctime: %Y%M%D'
date -d "@$v_sysdate" +'Current time: %Y%M%D'
echo "$v_date_difference seconds elapsed"
echo "$((v_date_difference / 86400)) days elapsed"

これは2時間の日数を数えることに注意してください。たとえば、昨日の23時59分と今日の00時1分の間には0日の差があります。時間を無視し、2 つの日付の差が必要な場合は、参照時間を使用できます。

file_midday_time=$(date +%s -d "$(date '+%Y-%m-%d 12:00' -d "@$(stat -c %Z file)")")
current_midday_time=$(date +%s -d "today 12:00")
day_difference=$(((file_midday_time - current_midday_time + 7200) / 86400))

3601 から 86399 までの数字を追加すると、日時計が通常の時間から夏時間に切り替わる場合でも、日数が計算されます (1 日は 23 時間しか持続しません)。

おすすめ記事