日付を日数に変換する必要があります。
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進値として扱います。)