Linux에 타임스탬프가 주어지면 X일 전의 타임스탬프를 얻는 방법은 무엇입니까?

Linux에 타임스탬프가 주어지면 X일 전의 타임스탬프를 얻는 방법은 무엇입니까?

date며칠 전의 타임스탬프를 얻기 위해 이 명령을 사용하고 타임스탬프를 부여하려면 어떻게 해야 합니까 ? X예를 들어 UTC 타임스탬프는 입니다 . 그 이전의 UTC 타임스탬프를 1525192000가져오고 싶습니다 .30

답변1

먼저, 귀하의 타임스탬프가 1970년 1월 1일 00:00:00 UTC 이후의 초 수라고 가정합니다. 그렇지 않은 경우 해당 타임스탬프로 변환합니다.

따라서 원하는 일수에서 초를 빼야 합니다.

stamp=1525192000
day=$((60*60*24))
echo $(($stamp - 30*$day))

그런 다음 Unix epoch 시간을 얻게 됩니다. 날짜와 시간으로 변환해야 하는 경우 DST를 고려해야 할 경우 date이 유틸리티를 사용해야 할 수 있습니다.

을 사용할 수도 있습니다 date. 이를 통해 계산 없이 다른 날짜 요소를 쉽게 사용할 수 있습니다.

GNU 사용 date:

date --date="$(date --iso-8601=s -d @1525192000) -30 days" +%s

예:

 $ date --date="$(date --iso-8601=s -d @1525192000)"
 Tue, May  1, 2018  7:06:01 PM
 $ date --date="$(date --iso-8601=s -d @1525192000) -30 days"
 Wed, Apr 1, 2018  7:06:01 PM
 $ date --date="$(date --iso-8601=s -d @1525192000) -30 days" +%s
 1523466380
 $ date --date="$(date --iso-8601=s -d @1525192000) -30 days -1 week -3 months" +%s
 1514309200

FreeBSD 및 macOS에서(이 -j방법은 시스템 날짜를 설정하려고 시도하지 않으므로 안전합니다.)

date -j -f "%a %b %d %T %Z %Y" "$(date -r 1234567890)"  -v-30d "+%s"

편집: 감사합니다. Kusalananda, OpenBSD 및 NetBSD에서는 지원되지 않습니다 -v.

관련 정보