bash에서 YYYYMMDDHHMMSS 형식에 X 년을 추가하는 방법은 무엇입니까?

bash에서 YYYYMMDDHHMMSS 형식에 X 년을 추가하는 방법은 무엇입니까?

참아주세요. 나는 강하지 않습니다 bash. 문자열 YYYYMMDDHHMMSS형식의 날짜/시간이 있습니다 . 20031005000000나는 1년을 추가하는 것을 좋아한다. 읽었 man date지만 내용을 설명하기가 약간 어렵습니다. 하지만 -dWWW에서 많은 예를 기본적으로 이해하고 선택했다고 생각합니다.-s

내가 읽은 많은 내용 중 일부는 다음과 같습니다.

그래서 현재는 현재 날짜에 1년을 더하는 방법을 알고 있습니다.

myDatePlusOneYr=$(date -d "+365 days" '+%Y%m%d%H%M%S')

one year기간(HHMMSS) 없이 날짜를 추가할 수 있습니다 .

myDate="20031005"
date -d "$myDate +365 day"
Mon Oct  4 00:00:00 GMT 2004

하지만 날짜/시간 형식에 연도를 추가하는 방법을 찾지 못했습니다. 기간과 함께 두 번째 옵션을 사용하려고 하면 다음 오류 메시지가 나타납니다.

date: invalid date `20031005000000 +365 day'

backtick날짜/시간의 시작과 끝을 확인했습니다 single quote. 오류 메시지를 해석하는 방법을 모르겠습니다. 귀하의 조언에 감사드립니다.

업데이트: 다음 질문에 대한 답을 찾았습니다 invalid date.https://stackoverflow.com/questions/4197606/how-to-convert-yyyymmddhhmmss-to-a-date-reader-by-date

답변1

지나치게 단순화했을 수도 있지만 다음과 같습니다.

% expr 20091005000000 + 10000000000
20101005000000

답변2

문자열을 숫자로 처리할 수 있습니다.

#/bin/sh
date='20000229000000'
echo "$((date + 10000000000))"

Print 20041005000000물론, 날짜가 윤년 2월 29일인 경우에는 작동하지 않지만, 유일한 예외입니다. 문자열을 여러 부분으로 나누고 윤일을 특별한 경우로 만들어 이 문제를 처리할 수 있습니다.

#!/bin/bash
date='20000229000000'
# assume it's correctly formatted
y=${date:0:4}
m=${date:4:2}
d=${date:6:2}
t=${date:8}

if [[ $m == 02 && $d == 29 ]]; then
        m=03
        d=01
fi

echo "$((y+1))$m$d$t"

일부 쉘(Bash 포함)에서 산술은 0으로 시작하는 숫자를 다음과 같이 처리합니다.8진수, 그러나 우리는 연도에 대해서만 산술을 수행하며 앞에 0이 있어서는 안 됩니다.

답변3

이 답변은 3개의 쉘 명령을 호출하여 수행하기 때문에 마음에 들지 않지만 작동합니다. 에서 시작하다myDate="20031005010203"

나는 당신이 그것에 또 다른 1년을 추가하고 싶다고 가정합니다. 추악한 방법은 압축을 풀고 처음 8자를 YYYYMMDD로 처리하고 연도를 추가한 다음 date 명령을 사용하여 결과 형식을 지정하는 것입니다. 시간을 시간 값으로 다시 연결합니다. 내 테스트 데이터에는 20040229(유효한 윤년)를 사용합니다.

myDate="20040229010203"
datebit=$(echo $myDate | cut -c 1-8)
timebit=$(echo $myDate | cut -c 9-)
newdate=$(date -d "$datebit +1 year" +"%Y%m%d${timebit}")
echo "${newdate}"

입력은 이고 20040229010203출력은 이어야 합니다 20050301010203.

따라서 "2004년 2월 29일 01:02:03에 시작하는 연도"는 "2005년 3월 1일 01:02:03"이 됩니다.

표준 명령을 사용하여 우분투에서 date이것을 테스트했습니다 .

관련 정보