Closed aoirint closed 8 months ago
タイムゾーン入れて治るんですかね?この不具合
ExtremeRoles.Announceリポジトリでのタイムゾーン情報の有無ではなく、DateTime.ToString()
の戻り値がロケール設定に依存した文字列になることが本件の原因なので、DateTime.ToString("u")
にすれば暫定直りそうとは思っています(ドキュメントを見る限り、これを実行するにはDateTime.ToUniversalTime()
でUTCタイムゾーンにする必要があるかもしれません)。
DateTime.ToString("u")
: 標準の日時書式指定文字列 - .NET | Microsoft Learnただ別件で、SavedAnnounce.Convert()
から作成されたAnnouncement.Date
は、現状タイムゾーン情報(末尾Z
か、末尾+09:00
か)を持たない日時文字列なので、DateTime.Parse
がJSTではないシステムのタイムゾーンとしてパースした場合、アナウンスのソート順にずれが出る不具合がある可能性はあるかも、と思いました。
このあたりの挙動は、C#のDateTimeがタイムゾーン情報を持たない日時/日時文字列をどう扱うかによりそうで、それはまだよくわかっていません。
Among Us上での公開時刻の制御については、JsonSerializer.Deserialize
の仕様にも依存しそうなので、同様にJST以外のタイムゾーンにおける挙動がよくわかっていません。
下手にタイムゾーン入れて元々入ってたデータとの整合性が取れなくなっても困る気がするので、曜日とかのデータをドロップしてToString出来るようにするかL256の実装のようにyyyyMMddTHHmmssでToStringするのがいい気がします
v9.2.0.5にて修正済み
期待される動作 / Your Expectation
Among Usのタイトル画面から「ニュース」を開き、ExtremeRolesのアナウンス(ExtremeRoles.Announce)を確認しようとした。
スクリーンショット: 正常に表示された場合のExtremeRoles.Announce
![945360_20231224004650_1](https://github.com/yukieiji/ExtremeRoles/assets/27213639/502db4ec-85d4-4102-894f-e10f8a28580a)実際の動作 / The Reality
ExtremeRolesのAnnounceが表示されず、AmongUs公式のアナウンスだけが表示された。
スクリーンショット: AmongUs公式のアナウンスだけが表示される
![945360_20231224010037_1](https://github.com/yukieiji/ExtremeRoles/assets/27213639/3f7f2478-459f-49dc-adf0-095d66526405)Windows 10での再現手順
intl.cpl
(Windowsの設定プログラム「地域」)を実行するyyyy/MM/dd
等からyyyy/MM/dd ddd
に変更する(タスクバーの時計に曜日が表示されるようになる)スクリーンショット: 「地域」と「追加の設定」ボタン
![intl_001](https://github.com/yukieiji/ExtremeRoles/assets/27213639/82ccf336-e3ba-4f07-abc9-f762aae837f4)スクリーンショット: 「日付」タブとデータ形式の「短い形式」
![intl_002](https://github.com/yukieiji/ExtremeRoles/assets/27213639/febfb5de-baa3-4de2-847f-1c2ba667ec08)日時データ形式の「短い形式」を
yyyy/MM/dd
に変更すると、ExtremeRolesのアナウンスが表示されるようになりました。あなたの意見 / Your Proposal
Windowsの日付と時刻の表示形式の設定によらず、ExtremeRolesのアナウンスが表示されるようにしてほしい。
SavedAnnounce
からAnnouncement
に変換する処理で、SavedAnnounce.OpenTime
はDateTime.ToString()
で文字列にされたあとDateTime.Parse()
でパースされる流れになっていますが、DateTime.ToString()
はロケール設定に基づいて日時を文字列化するようで、DateTime.Parse()
が対応していない書式で文字列化された場合に動作しないようです。SavedAnnounce.Convert()
が返すAnnouncement.Date
をタイムゾーン付きのISO 8601文字列にできるとよさそうです。https://github.com/yukieiji/ExtremeRoles/blob/27687709581e1db0a12f4c41f6f0bc1e24c3270b/ExtremeRoles/Module/ModAnnounce.cs#L41-L52
https://github.com/yukieiji/ExtremeRoles/blob/27687709581e1db0a12f4c41f6f0bc1e24c3270b/ExtremeRoles/Module/ModAnnounce.cs#L113-L116
Visual Studio 2022上でデバッグ実行した際のエラーメッセージ
![image](https://github.com/yukieiji/ExtremeRoles/assets/27213639/18881fe5-f8dc-45a6-a55a-7bea87bec7f5)バグ発生時のログやエラー / log when issue occur
ExtremeRolesDumpedLogs 2023-12-24T01-09-30.zip
Among Usバージョン/ Among Us Version
Among Us v2023.11.28s
Modバージョン / Mod Version
Extreme Roles v9.2.0.3
リージョン/Region
プレイヤー人数/Player Num
1
使用したオプション/Use Option
option.csv