이 두 날짜 명령이 다른 결과를 제공하는 이유는 무엇입니까? 1 month” +%B “3 월”을 알려줍니다. 4 월

$ date -d "Apr 1 2016 - 1 month" +%B

“3 월”을 알려줍니다. 4 월 이전의 달은 3 월입니다. 그러나 내가 이것을하면 :

$ date -d "$(date -d "Apr 1 2016") - 1 month" +%B

그것은 “2 월”을 제공합니다. 이것은 내가 가지고있는 좀 더 복잡한 코드에서 버그를 일으키고 있습니다. 이 두 명령이 다른 결과를 나타내는 이유는 무엇입니까?



답변

쉘 추적을 켜서 문제점을 확인할 수 있습니다.

+ date -d 'Apr 1 2016 - 1 month' +%B
March
++ date -d 'Apr 1 2016'
+ date -d 'Fri Apr  1 00:00:00 EDT 2016 - 1 month' +%B
February

내부 date명령 의 출력을 사용하면 4 월 초에 시작되며 한 달을 빼면 EST / EDT 변경으로 인해 불연속이 발생합니다.

+ date -d 'Fri Apr  1 00:00:00 EDT 2016 - 1 month'
Mon Feb 29 23:00:00 EST 2016

물론 결과는 현지 시간대 설정에 따라 다릅니다. 추적을 켜면 시간대가 표시됩니다 (제 경우에는 EDT).

결과가 다른 이유는 후자의 경우 더 많은 정보를 제공 date하여 매개 변수를보다 구체적으로 , 즉 특정 시간으로 설정 했기 때문 입니다. 첫 번째 부분에서는 지정되지 않았으므로 date표시 할 날짜 / 시간을 결정하는 방법에 대한 추가 정보를 제공합니다.


답변