편집: 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 소스 코드를 파고들지 않았을 것입니다!