Neutral Scent

App developments & Gadgets

サーバーアプリの日時取得にはDateTime.Nowではなく.UtcNowを使おう

でないと、北米のサーバーとかにインストールしたとたんにやっかいな事になる...。
基本というか、考えれば当たり前の事ですね(すいません、できてませんでした)。サーバーは置かれている場所のTimeZoneが使われるわけで、DateTime.Nowを使ったコードを国外のサーバーに入れれば、とたんに現地時間になって、あらぬ時刻を表示したり、クライアントときちんと同期できなくなります。
基本的にDateTime.NowとDateTime.UtcNowの使い方は一緒、DateTime.KindプロパティでUTCかLocalTimeかは見分けられます(KindはDBに書き込むと消えてしまうので、改めて読み出すとUnspecifiedに...)。
相互変換はDateTime.ToLocalTime()とDateTime.ToUniversalTime()で、簡単ですね。複数のTimeZoneが交錯するようなアプリだとまた大変ですけど、だからこそコアデータはUTCにしておくべきですし。