Bash 날짜의 산술 연산... ¿ 그 반대인가요?

Bash 날짜의 산술 연산... ¿ 그 반대인가요?

편집: Amazon Linux 사용:

Linux ip-xx-xx-xx-xxx 3.14.44-32.39.amzn1.x86_64 #1 SMP Thu 6월 11일 20:33:38 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux


이 명령의 출력은 다음과 같습니다.

date +"%Y-%m-%d %H:%M:%S" --date="2015-07-27 00:11:22"

2015-07-27 00:11:22

이 명령의 출력은 다음과 같습니다.

date +"%Y-%m-%d %H:%M:%S" --date="2015-07-27 00:11:22 + 00:05"

2015-07-27 00:06:22

이 명령의 출력은 다음과 같습니다.

date +"%Y-%m-%d %H:%M:%S" --date="2015-07-27 00:11:22 - 00:05"

2015-07-27 00:16:22

맙소사, 우리 시간을 되돌린 걸까? 아니면 8층에 문제가 있는 걸까요?

편집하다: 내 Amazon Linux의 시간은 UTC+00:00이고 Ubuntu 로컬 시스템의 시간은 UTC-05:00입니다. Ubuntu의 동일한 명령은 다음을 보여줍니다.

2015-07-26 19:11:22

2015-07-26 19:06:22

2015-07-26 19:16:22

각각 + 00:05시간대가 아닌 것 같습니다.

답변1

소식통에 따르면gnulib의 구문 분석-datetime.y, 기능 관련 기능인 것 같습니다시간대_hhmm.

먼저, 다음 형식을 사용하여 초를 추가할 수 없습니다. date +"%Y-%m-%d %H:%M:%S" --date="2015-07-27 00:11:22 - 00:05:01"구문 분석 오류가 발생합니다.

date: invalid date ‘2015-07-27 00:11:22 - 00:05:01’

그런 다음 time_zone_hhmm 함수의 헤더에 따라:

/* Convert a time zone expressed as HH:MM into an integer count of
minutes.  If MM is negative, then S is of the form HHMM and needs
to be picked apart; otherwise, S is of the form HH.  As specified in
http://www.opengroup.org/susv3xbd/xbd_chap08.html#tag_08_03, allow
only valid TZ range, and consider first two digits as hours, if no
minutes specified.  */

따라서 시간을 역순으로 추가/제거하는 동작과 일치하는 시간대를 수정하는 것처럼 보입니다.

정시에 산술을 수행하려면 계산을 더 쉽게 수행할 수 있는 Epoch 타임스탬프(날짜 + '%s')를 사용하는 것이 좋습니다. 또한 이는 UTC 시간을 기반으로 하며 사용 중인 서버의 현지 시간대를 고려하지 않습니다.

따라서 타임스탬프는 미국, 아시아 또는 유럽에서 동일한 결과를 반환합니다. 그런 다음 이 타임스탬프를 사용하여 시간대를 고려하여 사람이 읽을 수 있는 시간을 표시합니다.

어쨌든 잘 잡았습니다. 이 훌륭한 팁이 없었다면 저는 결코 gnulib 소스 코드를 파고들지 않았을 것입니다!

관련 정보