명령으로 표시되는 시간대 약어를 변경하는 방법이 궁금합니다 date
. 시간대는 그대로 두는데, CST
아래로 어떻게 바꾸나요 UTC+8
?
clay@LAPTOP-3PP2093I:~$ date
Thu Dec 1 23:05:28 CST 2022
감사합니다!
추신 1. 운영 체제는 우분투 22.04입니다.
PP 2. 내 시간대는 Asia/Taipei이므로 날짜 +%Z의 결과는 CST입니다. 그러나 나는 이 약어가 혼란스럽다고 생각하며 UTC+8로 읽어줬으면 합니다.
PS 3. 시간을 아시아/싱가포르로 변경하여 해결 방법을 시도했습니다. 예, date+%Z의 결과는 +08입니다. 하지만 저는 시간대를 바꾸고 싶지 않습니다.
답변1
일년 내내 과거, 현재 및 미래 날짜에 대해 UTC보다 8시간 앞서 export TZ='<UTC+8>-8'
명명된 현재 시간대를 정의할 수 있습니다 .UTC+8
그 다음에:
$ date +'%::z %Z'
+08:00:00 UTC+8
$ date
Thu 1 Dec 23:04:48 UTC+8 2022
Asia/Taipei
시간대의 기록 변경 사항도 보존 하고 %Z
반환된 내용을 변경하려면 해당 데이터가 파생된 tzdata를 수정하고 다시 컴파일해야 합니다.
apt source tzdata
sudo apt build-dep tzdata
대만 부분을 다음으로 변경합니다.
# Rule NAME FROM TO - IN ON AT SAVE LETTER/S
Rule Taiwan 1946 only - May 15 0:00 1:00 9
Rule Taiwan 1946 only - Oct 1 0:00 0 8
Rule Taiwan 1947 only - Apr 15 0:00 1:00 9
Rule Taiwan 1947 only - Nov 1 0:00 0 8
Rule Taiwan 1948 1951 - May 1 0:00 1:00 9
Rule Taiwan 1948 1951 - Oct 1 0:00 0 8
Rule Taiwan 1952 only - Mar 1 0:00 1:00 9
Rule Taiwan 1952 1954 - Nov 1 0:00 0 8
Rule Taiwan 1953 1959 - Apr 1 0:00 1:00 9
Rule Taiwan 1955 1961 - Oct 1 0:00 0 8
Rule Taiwan 1960 1961 - Jun 1 0:00 1:00 9
Rule Taiwan 1974 1975 - Apr 1 0:00 1:00 9
Rule Taiwan 1974 1975 - Oct 1 0:00 0 8
Rule Taiwan 1979 only - Jul 1 0:00 1:00 9
Rule Taiwan 1979 only - Oct 1 0:00 0 8
# Zone NAME STDOFF RULES FORMAT [UNTIL]
# Taipei or Taibei or T'ai-pei
Zone Asia/Taipei 8:06:00 - UTC+8:06 1896 Jan 1
8:00 - UTC+8 1937 Oct 1
9:00 - UTC+9 1945 Sep 21 1:00
8:00 Taiwan UTC+%s
그런 다음 다음을 사용하여 새 패키지를 빌드합니다 tzdata
.
dpkg-buildpackage -b
생성된 패키지를 설치합니다.
그 다음에:
$ export TZ=Asia/Taipei
$ date
Thu 1 Dec 23:17:41 UTC+8 2022
$ date -d 1979-08-01
Wed 1 Aug 00:00:00 UTC+9 1979
$ date -d 1892-06-01
Wed 1 Jun 00:00:00 UTC+8:6 1892
Ubuntu 소스 패키지를 업데이트할 때마다 이 작업을 다시 수행해야 하므로(1년에 여러 번 발생, 예를 들어 어떤 국가의 정부가 새로운 DST 변경 날짜나 규칙을 결정할 때) 실용적이지 않을 수 있습니다.
date
의 출력에만 문제가 있는 경우 다음을 수행할 수도 있습니다.
$ date +"$(locale date_fmt | sed 's/%Z/UTC%:z/')"
Fri 2 Dec 00:31:05 UTC+08:00 2022
바꾸다
$ date
Fri 2 Dec 00:31:05 CST 2022
또는:
$ date +"$(locale d_t_fmt | sed 's/%Z/UTC%:z/')"
Fri 02 Dec 2022 00:33:02 UTC+08:00
바꾸다:
$ date +%c
Fri 02 Dec 2022 00:33:02 CST
그것들:
$ locale -k LC_TIME | grep fmt
d_t_fmt="%a %d %b %Y %T %Z"
d_fmt="%d/%m/%y"
t_fmt="%T"
t_fmt_ampm="%l:%M:%S %P %Z"
era_d_fmt=""
era_d_t_fmt=""
era_t_fmt=""
date_fmt="%a %e %b %H:%M:%S %Z %Y"
이는 기본 설정에 따라 새 로케일을 컴파일하여 변경할 수 있습니다.
localedef -i <(sed 's/%Z/UTC%z/g' /usr/share/i18n/locales/en_GB) \
-f UTF-8 ~/.locales/en_GB.UTF-8@mytimezoneformat
export LOCPATH=~/.locales LC_TIME=en_GB.UTF-8@mytimezoneformat
(위의 내용은 내 홈 디렉토리에 설치되어 있지만 설정하지 않고도 시스템 전체에서 이 작업을 수행할 수도 있습니다 $LOCPATH
.)
그 다음에:
$ date
Fri 2 Dec 01:11:16 UTC+0800 2022
$ date +%c
Fri 02 Dec 2022 01:11:20 UTC+0800