날짜 합계 계산

날짜 합계 계산

우리는 작업이 실행된 시간(분)을 기준으로 정보를 추출하는 타사 스크립트를 사용합니다. 스크립트에 이 입력이 필요합니다.

예를 들어
이것은 예입니다.

    export etool_start=`date +"%Y%m%d%H%M:"`  

내 기본 스크립트는 시작 시간과 종료 시간 사이에 실행됩니다.

    export etool_end=`date +"%Y%m%d%H%M"`

위 결과의 출력은 201607050220:201607050230과 같습니다. 시간은 0220~0230입니다. 내 스크립트는 이 날짜 유형을 허용하지 않으며 -0010(10분)과 같은 분만 허용합니다. 이 결과를 얻는 데 도움이 되는 수학을 어떻게 만들 수 있습니까? 제가 제시한 시간은 단지 예시일 뿐이며, 샘플링 간격은 2분에서 120분, 하루까지 가능합니다. 이런 종류의 출력을 얻으려면 date 명령을 어떻게 사용합니까?

도와주세요.

감사해요.

답변1

에포크( ) 이후의 시간을 초 단위로 측정하는 것이 훨씬 간단합니다. +%s그런 다음 빼서 초 단위의 경과 시간을 찾고, 초를 분으로 변환하려면 60으로 나누면 됩니다.

export etool_start=$(date +"%s")
do_stuff_with_etool
export etool_stop=$(date +"%s")
echo "elapsed time=$(( (etool_stop - etool_start)/60 )) minutes"

인간 형태의 시간이 정말로 필요하다면 변환할 수 있습니다. GNU 사용 date:

$ date -d "@$etool_start"
Tue Jul  5 21:30:19 PDT 2016

또는:

$ date -d "@$etool_start"  "+%Y%m%d%H%M"
201607052130

서식 지정에 대한 추가 정보

경과 시간을 다양한 형식으로 분 단위로 표시하려면 를 사용할 수 있습니다 printf. 예를 들어, 4자리 경과 시간을 생성하려면 다음 형식을 사용할 수 있습니다 %04i.

$ printf '%04i\n' "$(( ($etool_stop - $etool_start)/60 ))" 
0001

의 형식은 %4i4자리 정수(i)를 제공합니다. 선행 공백 대신 선행 0을 원하면 를 사용합니다 %04i.

숫자의 반대 부호를 원하는 경우:

$ printf '%05i\n' "$(( ($etool_start - $etool_stop)/60 ))" 
-0035

빼기 기호에는 추가 문자가 필요하므로 할당된 공간을 4에서 5로 늘립니다 %05i.

더 많은 해결 방법

위의 예에서는 bash 산술을 사용하므로 정수일 뿐입니다. 경과 시간을 분 단위(분 단위 포함)로 확인하려면 다음 bc과 같은 다른 도구를 사용할 수 있습니다.

$ echo "($etool_stop - $etool_start)/60" | bc -l
1.38333333333333333333

에포크 이후 몇 초가 지났나요?

epoch 이후의 초 수는 man date다음과 같이 정의됩니다.


1970-01-01 00:00:00 UTC 이후 %s초

이렇게 정의되므로 현지 시간대는 중요하지 않습니다. 따라서 -u"현지 시간대" 또는 세계 시간으로 계산하는 데 차이가 없습니다.

$ date +%s; date -u +%s
1467780345
1467780345

답변2

배쉬에서:

$ export etool_starting=`date -u +"%s"`  
$ export etool_ending=`date -u +"%s"`

몇 분 밖에 걸리지 않는 경우:

$ printf '%05d\n' "$(( (etool_starting - etool_ending) / 60 ))"
-0120       ### If 120 minutes have elapsed in between.

관련 정보