날짜를 일수로 변환해야 합니다.
date +%s --date "10 March 1990"
637027200
두 번째 숫자를 얻으려면. 그런 다음 그 숫자를 하루의 초 수인 86400으로 나눴습니다.
date +%s --date "10 March 1990" / 86400
7373
하지만 1970년 1월 1일 이전 날짜에는 작동하지 않습니다.
1950년에서 2020년 사이의 날짜를 사용해야 합니다.
해결책이 있나요? 어쩌면 1970년 1월 1일과 다른 날짜로 신기원 시간을 재정의할 수 있는 날짜 바이너리가 있을까요?
답변1
에포크 날짜는 고정되어 있습니다. 1950년부터 작업을 수행해야 하므로 32비트 Unix 시간을 사용할 수 있습니다.
숫자가 음수인 경우에도 마침표를 두 개 추가할 수 있습니다.
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진수 값으로 처리합니다.)