2017-10-15 8 views
2

나는 같은 날 오후 00 시부 터 23시 59 분까지 고객의 정보 다운로드를 자동화하는 스크립트 작업을하고 있습니다. 일광 절약 시간 첫 날 (10/15/2017, 내 시간대 - BRST)을 올바르게 처리하려면 전날의 시간대를 확인해야합니다. 그러나, 나는쉘 스크립트에서 날짜를 빼는 방법?

date --date="20171015 01:00 -1 day" +%Y-%m-%d 

결과는 다음 날 2017-10-16 아니라 전날 2017-10-14이며, 첫 번째 유효한 시간에서 하루 빼기 것입니다. 아무도 제가 잘못하고있는 일을 이해하는 데 도움이 될 수 있습니까? 그리고 올바른 방법으로이 작업을 어떻게해야합니까?

+0

에 충실? 여러분의 시스템이 그것을 어떻게 사용하고 있는지'man date'를 확인하십시오 (당신의 경우에 도움이 될 수도 있고 그렇지 않을 수도 있습니다). 행운을 빕니다. – shellter

+0

날짜 산술이 희박 해집니다. 나는 여러 날에'... 01:00 -1 시간 '을 시험해 보았고, 전날 23시를 꾸준히 가졌다. – chepner

답변

2

저는 GNU date의 산술을 정말로 신뢰하지 않습니다. 대신 UNIX 초기 이후 시작 시간을 초 단위로 변환하고 86400 초를 뺀 다음 결과를 다시 하루로 변환합니다. 이러한 변환 루틴은 일광 절약 시간을 고려합니다.

$ TZ=BRST date +%s --date "20171015 01:00" 
1508029200 
$ TZ=BRST date +%F-%T --date @$((1508029200 - 86400)) 
2017-10-14-01:00:00 
+0

안녕하세요, @ 체크! 이 접근 방식은 나를 위해 일했습니다. 고마워요! – mari

0

그것은 "BRST"시간대가 매우 유용하지 않습니다 나타납니다 올슨 시간대 이름 당신은`TZ =`ENV var에 대해 알고

$ TZ=BRST date --date="20171015 00:30" "+%F %T" 
2017-10-15 00:30:00 

$ TZ=America/Sao_Paulo date --date="20171015 00:30" "+%F %T" 
date: invalid date ‘20171015 00:30’