日付を秒または日に変換

日付を秒または日に変換

日付を日数に変換する必要があります。

date +%s --date "10 March 1990"

637027200

2番目の数字を取得するには。その後、その数を1日の秒数である86400で割った。

date +%s --date "10 March 1990" / 86400

7373

ただし、1970年1月1日より前の日付では機能しません。

1950年から2020年の日付を使用する必要があります。

解決策はありますか?おそらく、1970年1月1日とは異なる日付で新起源の時間をオーバーライドできる日付バイナリがありますか?

答え1

エポックの日付は固定されています。 1950年から作業を行う必要があるため、32ビットUnix時間を使用できます。

数値が負の場合でも、ピリオドを2つ追加できます。

1950年から1970年まで+1970年から現在まで:

#Get the current date time timestamp
d1="$(date +%s)"
#Get the timestamp from <date> to 1970 and remove negative sign
d2="$(date +%s --date "10 March 1950" | sed 's/-//g')"
#Perform addition of both timestamps
res="$((d1+d2))"
echo "$res"  # Output 2235228403

答え2

別の方法は、1950年から始まり0日前に始まり、年間日数を開始値として追加するだけです。次のように見えます。

前の年の各年の日数の合計を含む配列を作成します。

#!/bin/bash
ndays[1950]=0
for i in {1951..2020} ; do
    ndays[i]=$(( ${ndays[i-1]}+$(date +%j --date "31 dec $((i-1))" ) ))
done
  

新しい日付IDは、開始値(1950年以降のすべての前の年の日数の合計)と現在の日付の年です。

date="22 May 1975"
year=$(cut -d' ' -f3 <<<$date)
dayID=$(( ${ndays[year]} + $(date --date "$date" +%-j) ))

%-j(注:and notを使用する必要があります%j。そうしないと、bashは前に0があるため、年の最初の99日を8進値として扱います。)

関連情報