Yamanaka
- — 9 months ago

開発中のゲームで、特定の端末で進行不能事態発生!! 早急に原因究明に動きました。
結論から言いますと、初期値が不適切で、端末タイムゾーンがUTCよりマイナスになっていると発生する不具合でした。 特定の端末のみ進行不能エラーが出たと思ったらその端末のみタイムゾーンがUTCよりマイナスになっていました。
Unity上で確かめてみると
public System.DateTimeOffset offset = System.DateTime.MaxValue;
と宣言しているところで ArgumentOutOfRangeException: The UTC time represented when the offset is applied must be between year 0 and 10,000. のエラーが表示されました。 Googleで翻訳してみましたら「オフセットが適用されるときに表されるUTC時間は、0年から10,000の間でなければなりません。」
System.DateTime.MaxValueの値は9999/12/31 23:59:59です。 タイムゾーンが日本の時のUTC時間で出力しましたら 9999/12/31 14:59:59 とUTC時間より9時間進んでいる場合UTC時間は9時間前になります。 これはもしタイムゾーンがUTCよりマイナスならその分UTC時間が進んで10000年超えますね...
逆に
public System.DateTimeOffset offset2 = System.DateTime.MinValue;
にしたら 今度は日本に戻したときに同様のエラーが出力されました。 System.DateTime.MinValueは0001/01/01 0:00:00ですから、当然ですよね...
結論といたしまして
public System.DateTimeOffset offset = new System.DateTimeOffset();
とシンプルにnewで宣言するのが一番ですね。
これで大丈夫だと思っていたのですが、新たな問題が発生いたしました。
public long Yesterday
{
get { return offset.AddDays(-1).ToUnixTimeSeconds(); }
}
と前日の日を取得するところで ArgumentOutOfRangeException: The added or subtracted value results in an un-representable DateTime. のエラーが表示されました。 どうやら初期値のまま使っている時がありましたので
get { return new System.DateTimeOffset() == offset ? offset.ToUnixTimeSeconds() : offset.AddDays(-1).ToUnixTimeSeconds(); }
と初期値から変更されていないなら減らさないようにする事で解決いたしました。 本当は初期値なら本日の値を入れていないということなので使わないのが一番ですけれどね...
時間系の処理を作成したらタイムゾーンを変更しても問題ないか動作テストを行う必要がありますね。
以上 山中がお伝えしました。またお会いしましょう!
Yamanaka
Programmer
ArgumentOutOfRangeException: The UTC time represented when the offset is applied must be between year 0 and 10,000.について ArgumentOutOfRangeException: The UTC time represented when the offset is applied must be between year 0 and 10,000.について 2020-05-15 07:51:09- CentOS7にNextCloudを導入する 1 year ago
- Laravel mix vue No.1 - Docker Environment - Dockerでlaravel環境 (laradockを使わない) 10 months ago
- DockerでCodeigniter4 betaを動かす 1 year ago
- Windows10 Home+WSL2でLinux(CentOS7)を動かす 6 months ago
- Asterisk16について調べてみた 1 year ago
- PipenvによるWindows上でのPython仮想環境の構築について 10 months ago
- 負荷試験ツール「Gatling」を試してみた。【Windows 10 編】 10 months ago
- PHP7.4のpreloadでLaravel7を高速化!? 6 months ago
- 【Docker環境】FluentdとMySQLのbulk insertを使用したログ収集【前編】 9 months ago
- CentOS6を使ったルーティング 1 year ago
- PHPからJavaScriptに変数の受け渡しで躓いた事 4 days ago
- Unity初心者がawsサーバーとWebSocketを使ってのリアルタイム同期通信について学ぶ② 3 weeks ago
- Unity初心者がawsサーバーとWebSocketを使ってのリアルタイム同期通信について学ぶ① 1 month ago
- Dockerコンテナ(Fluentd)のTimeZoneをUTCからJSTに変更する 2 months ago
- 端末でのサマータイム確認でログインできない 3 months ago
- laravelを経験した後のEC-CUBE3の所感 3 months ago
- Amazon Auroraのレプリケーション 3 months ago
- Asteriskの音声ガイダンスを日本語化 4 months ago
- AsteriskでCDR(通信履歴)をODBC接続でMySQLへ保存する 4 months ago
- AsteriskのRealtime DatabaseでODBCを使わずにMySQLへ接続する 4 months ago