이 두 날짜 명령이 다른 결과를 제공하는 이유는 무엇입니까?

이 두 날짜 명령이 다른 결과를 제공하는 이유는 무엇입니까?
$ date -d "Apr 1 2016 - 1 month" +%B

"3월"이라고 해주세요. 좋습니다. 4월 바로 전 달이 3월입니다. 하지만 이렇게 하면:

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

그것은 나에게 "2월"을 주었다. 이로 인해 좀 더 복잡한 코드에서 오류가 발생했습니다. 이 두 명령이 다른 결과를 표시하는 이유는 무엇입니까?

답변1

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

+ 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

내부 명령의 출력을 사용하면 date4월 초이고 한 달을 빼면 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표시할 날짜/시간을 결정하는 방법에 더 많은 여지가 있습니다.

관련 정보