bash 스크립트를 작동시키려고 하는데, 이를 위해 +%Y%m%d%H%M%S
현지 시간 형식(예: "20150903170731")을 동일한 형식의 UTC 시간으로 변환해야 합니다.
date -u
현재 UTC 시간을 알려주실 수 있다는 것을 알고 있습니다 .
$ date +%Y%m%d%H%M%S -u
20150903161322
또는 -u
현지 시간 없이(여기서는 BST):
$ date +%Y%m%d%H%M%S
20150903171322
이제 매개변수를 추가하면 date
오류가 발생합니다.
echo "20150903154607" | xargs date +"%Y%m%d%H%M%S" -u
date: extra operand `20150903154607'
이러한 오류 없이 이 변환을 수행할 수 있는 방법이 있습니까?
답변1
사용할 날짜를 전달하려면 옵션을 date
사용하십시오 . -d
따라서 귀하의 명령은 다음과 같습니다 echo "20150903154607" | xargs date +"%Y%m%d%H%M%S" -u -d
.
그러나 제공한 날짜 형식은 사용되지 않습니다.
$ date -d 20150903154607
date: invalid date ‘20150903154607’
$ date -d 20150903\ 15:46:07
Thu Sep 3 15:46:07 BST 2015
먼저 약간의 마사지를 해주세요(GNU sed):
$ echo "20150903154607" \
| sed -re 's/^([0-9]{8})([0-9]{2})([0-9]{2})([0-9]{2})$/\1\\ \2:\3:\4/' \
| xargs date -u -d
Thu Sep 3 15:46:07 UTC 2015
-u
현지 시간을 UTC로 변환하려면 입력 및 출력 날짜의 해석에 영향을 미치므로 좀 더 많은 작업을 수행해야 합니다 .
$ echo "20150903171734" \
| sed -re 's/^([0-9]{8})([0-9]{2})([0-9]{2})([0-9]{2})$/\1\\ \2:\3:\4/' \
| xargs date +@%s -d \
| xargs date -u +%Y%m%d%H%M%S -d
20150903161734
위의 첫 번째 호출은 date
현지 시간( time 기준 $TZ
)을 epoch 이후의 초로 변환한 다음 두 번째 호출은 epoch 초를 UTC 날짜 및 시간으로 변환합니다.
답변2
나는 또한 더 간단한 것을 사용했습니다.
date -u -d @$(date -d '2019-09-17 19:29:45' +%s)
Tue Sep 17 23:29:45 UTC 2019
date
이전 답변에 설명된 대로 사용자 정의 형식을 이해할 수 있는 형식으로 변환해야 합니다.