답변:
ring0은 몇 초 만에 나를 이겼지 만 전체 명령은 다음과 같습니다.
echo $(($(date --utc --date "$1" +%s)/86400))
UTC 시간으로 진행됩니다. 결과:
root@hostname:~# echo $((`date --utc --date "$1" +%s`/86400))
14984
울프 럼 알파의와 빠른 확인 이 올바른 값임을 보여줍니다.
이 문제도 해결해야했지만 시간과 상관없이 하루 #와 동일한 가치를 얻고 싶었습니다. 여기에 표시된 것과 같은 접근 방식을 사용하면 현지 시간 자정 대신 UTC 자정에 값이 변경됩니다. 이것은 아마도 EU 또는 미국 동부 해안의 문제가 아닌 것 같습니다. UTC에 가깝기 때문에 일반적인 근무일 중에는 하루 값이 변경되지 않지만 캘리포니아에서는 하루 변화가 있습니다. PST 오후 4시에 발생할 수 있으며 이는 불편할 수 있습니다. 나는 호주인들이 늦은 아침에 하루 값이 바뀌는 것을 특히 짜증나게 할 것이라고 생각합니다.
이를 수정하려면 secs / day로 나누기 전에 UTC로부터 오프셋을 추가해야합니다. 다행히도 Linux date 명령에는 UTC로부터의 오프셋을보고 하는 % z 형식 시퀀스가 포함되어 있습니다. 표준 형식 (이 결과는 MDT 덴버 시간에 해당) :
$ date +%z
-0600
. . . 계산에서 직접 사용할 수없는 경우 올바른 수정자가 원하는 것을 산출합니다.
$ date +%-:::z
-6
일반적인 secs / hours / days 변환과 함께 사용하면 다음과 같이 1/1/1970 이후의 날을 출력해야하며 1/1/1970 자체는 0 일이며 현지 자정에 값이 증가합니다.
echo $(( ( $(date +"%s + ( %-:::z * 3600)") ) / 86400 ))
"+5 : 30" date +%-:::z
이 "표현식에서 유효하지 않은 문자"오류를 생성하기 때문에 전체 시간 (예 : 인도, TZ = 아시아 / 콜카타)으로 UTC에서 오프셋되지 않은 시간대에 대해서는이 간단한 계산이 작동하지 않습니다. 위의 진술에서 사용될 때.
$()
백틱보다 선호 됩니다 .echo $(( $(date ...) / 86400 ))