Chill with You のタイムゾーン Bug
どういうこと?
Section titled “どういうこと?”Steam に Chill with You ~ Lofi Story というゲーム(ゲームか?実質ポモドーロタイマー!)がある。結構気に入っているゲームで、ヒロインが可愛くて、一緒にいてくれる感がすごく強い。
設定上はヒロインと自分が別々のパラレルワールドにいることになっているので、ゲーム内に表示される時間と自分のローカル時間に時差があるのも、ずっとその設定の一部だと思って放置していた。
ところがバージョン 1.2 アップデート(1月27日)の後、Steam のコミュニティ掲示板でこんなコメントを見つけた:要約すると「Linux 上で Proton を使ってこのゲームを起動すると、ゲーム内の時刻が常に UTC+0 で表示される」という内容だった。
UTC(協定世界時)について簡単に説明すると、自分のところは UTC+8 なので、実際の時刻が 8:00 だとしたら、ゲーム内では 0:00 と表示されてしまう。つまり 8 時間のズレが生じる。
は??まさかのパラレルワールド設定じゃなくて、単純にタイムゾーンを正しく読み取れてなかっただけ!?そりゃあちょうど 8 時間ズレるわけだわ……
実はとてもシンプルな問題で、原因はすぐに判明した:Proton で動かしている Windows プログラムが、Linux システムのタイムゾーン情報を正しく読み取れていなかったのだ。Linux ではタイムゾーン情報は通常 /usr/share/zoneinfo/ ディレクトリに格納されている(NixOS の場合は /etc/zoneinfo/ 以下)。
解決策はシンプルで、起動オプションでタイムゾーンを明示的に指定するだけ。Steam の「ゲームのプロパティ」→「起動オプション」に以下を追加:
TZ=Asia/Shanghai:タイムゾーンを上海(北京時間)に指定TZDIR=/etc/zoneinfo:タイムゾーンファイルのディレクトリを指定
最終的にこんな感じ:
TZDIR="/usr/share/zoneinfo" TZ="Asia/Shanghai" %command%この起動オプションを追加してからゲームを起動すると、時刻が正常に表示されるようになった。9:31 はちゃんと 9:31 に。

問題はほぼこれで解決。自分もそのコメントに返信して解決策を共有しておいた。もし同じ問題に遭遇したら、この記事が役に立てば嬉しい。
ちなみに自分は NixOS を使っている。通常なら /etc/zoneinfo を使うべきで、/usr/share/zoneinfo ではない(NixOS には /usr/share/zoneinfo というディレクトリが存在しないため)。ただ、これでも一応動く。Steam の環境がうまく処理してくれるからだ。
Belike:
~ $ steam-run ls /usr/share/zoneinfoAfrica Egypt Hongkong Mexico ROKAmerica Eire HST MST SingaporeAntarctica EST Iceland MST7MDT TurkeyArctic EST5EDT Indian Navajo tzdata.ziAsia Etc Iran NZ UCTAtlantic Europe iso3166.tab NZ-CHAT UniversalAustralia Factory Israel Pacific USBrazil GB Jamaica Poland UTCCanada GB-Eire Japan Portugal WETCET GMT Kwajalein posix W-SUChile GMT+0 leapseconds PRC zone1970.tabCST6CDT GMT-0 leap-seconds.list PST8PDT zonenow.tabCuba GMT0 Libya right zone.tabEET Greenwich MET ROC Zulu~ $ ls /usr/share/zoneinfolsd: /usr/share/zoneinfo: No such file or directory (os error 2).最後に:この記事以降、ファイル名の先頭に番号をつけるようにしました。じゃないと散らかってしまうので。