현지 날짜 시간을 UTC 날짜 시간으로 변환하는 방법은 무엇입니까?

현지 날짜 시간을 UTC 날짜 시간으로 변환하는 방법은 무엇입니까?

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이전 답변에 설명된 대로 사용자 정의 형식을 이해할 수 있는 형식으로 변환해야 합니다.

관련 정보