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