日付コマンドのタイムゾーン文字列を変更するには?

日付コマンドのタイムゾーン文字列を変更するには?

コマンドで表示されるタイムゾーンの略語を変更する方法がわかりますdate。時間帯はそのままにしておきますが、CST下にどのように変更しますかUTC+8

clay@LAPTOP-3PP2093I:~$ date
Thu Dec  1 23:05:28 CST 2022

ありがとうございます!

PS 1.オペレーティングシステムはUbuntu 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ソースパッケージを更新するたびにこれをやり直す必要があるため(年に数回発生します。たとえば、国の政府が新しい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

おすすめ記事