이것을 시도했지만 실패했습니다.
now=$(date +%Y%m%d%H%M%S)
past=$(date +%Y%m%d%H%M%S -d "${now} -5minutes")
echo $past
결과:
date: invalid date ‘20200120175610 -5minutes’
TT
답변1
이것은 date (GNU coreutils) 8.26
.
$ date -d "5 minutes ago" +%Y%m%d%H%M%S
20200120101533
답변2
GNU 날짜는 이 형식의 타임스탬프를 구문 분석할 수 없는 것 같습니다. 주요 부분은 1년입니다.
% date +%Y%m%d%H%M%S -d 20200120175610 --debug
date: parsed number part: (Y-M-D) 2020012017-56-10
date: input timezone: system default
date: warning: using midnight as starting time: 00:00:00
date: error: invalid date/time value:
date: user provided time: '(Y-M-D) 2020012017-56-10 00:00:00'
date: normalized time: '(Y-M-D) 2020012021-08-10 00:00:00'
date: ---- --
date: possible reasons:
date: numeric values overflow;
date: missing timezone
date: invalid date ‘20200120175610’
오류가 발생하지 않으면 오버플로되지는 않지만 여전히 예상한 대로 작동하지 않는 것입니다.
% date +%Y%m%d%H%M%S -d "20200120181002 -5minutes" --debug
date: parsed hybrid part: -5 minutes
date: input timezone: system default
date: warning: using midnight as starting time: 00:00:00
date: starting date/time: '(Y-M-D) 2020012018-10-02 00:00:00'
date: '(Y-M-D) 2020012018-10-02 00:00:00' = 63745360147926000 epoch-seconds
date: after time adjustment (+0 hours, -5 minutes, +0 seconds, +0 ns),
date: new time = 63745360147925700 epoch-seconds
date: timezone: system default
date: final: 63745360147925700.000000000 (epoch-seconds)
date: final: (Y-M-D) 2020012018-10-01 14:55:00 (UTC)
date: final: (Y-M-D) 2020012018-10-01 23:55:00 (UTC+09)
20200120181001235500
다양한 타임스탬프 형식을 사용하세요. ISO-8601을 사용하고 필요에 따라 출력 형식을 다시 지정하는 것이 좋습니다.
% now=$(date --iso-8601=seconds)
% past=$(date -d "$now - 5 minutes" --iso-8601=seconds)
% printf "%s\n" "$now" "$past"
2020-01-20T18:29:50+09:00
2020-01-20T18:24:50+09:00
% date -d "$past" +%Y%m%d%H%M%S
20200120182450
답변3
이렇게 작동할 수도 있습니다.
past=$(date +%Y%m%d%H%M%S -d ${now} -d "-5minutes")