サンプル シナリオ:
サーバーはタイム ゾーン +13.00 (たとえば) にあり、ユーザーはタイム ゾーン +2.00 で作業しています。
どのように私は引き起こすことができます:
DateTime.Now
UTC +2.00 の時刻を返すためにサーバーで呼び出されましたか? (または、DateTime.Now の結果を +2.00 タイム ゾーンに変換します)
サンプル シナリオ:
サーバーはタイム ゾーン +13.00 (たとえば) にあり、ユーザーはタイム ゾーン +2.00 で作業しています。
どのように私は引き起こすことができます:
DateTime.Now
UTC +2.00 の時刻を返すためにサーバーで呼び出されましたか? (または、DateTime.Now の結果を +2.00 タイム ゾーンに変換します)
TimeZoneInfo.ConvertTimeメソッドを使用します。DateTime
これにより、変換する とソース/宛先のタイム ゾーンを渡すことができます。
使用例:
var localTime = DateTime.Now;
try
{
Console.WriteLine("Local time: {0}", localTime);
TimeZoneInfo destTz = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time");
var pacificTime = TimeZoneInfo.ConvertTime(localTime, TimeZoneInfo.Local, destTz);
Console.WriteLine("Pacific time: {0}", pacificTime);
}
catch (TimeZoneNotFoundException)
{
Console.WriteLine("The registry does not define the Pacific Standard Time zone.");
}
catch (InvalidTimeZoneException)
{
Console.WriteLine("Registry data on the Pacific Standard Time zone has been corrupted.");
}
ローカル タイム ゾーンを常に変換している場合 (つまり、X タイム ゾーンから Y に変換することを明示的に言っていない場合)、パラメーターを取らない他のTimeZoneInfo.ConvertTimesourceTimeZone
オーバーロードを使用できます。タイムゾーンはDateTime.Kind
、ソース日付のプロパティから計算されます (あなたの場合、DateTime.Now
いずれにしてもローカルを意味します)。
normalDateTime
自体には、タイム ゾーンに関する情報は含まれません。Kind
(現地時間または世界時であることがわかっている場合は、ヒントが含まれています。)
サーバーとユーザー間の通信で UTC 時間を使用する可能性を検討してください。送信前は 、.ToUniversalTime()
受信後は を使用してください.ToLocalTime()
。DateTime
値に対して算術演算を実行するKind
と、保存されない可能性があり、誤って.ToLocalTime()
複数回実行するなどのリスクがあることに注意してください。
DateTimeOffset
代わりに使用する可能性もあります。日付と時刻とともにタイムゾーンが含まれています。
var nowWithZone = DateTimeOffset.Now;
やDateTimeOffset
などの方法で other に変換できます。nowWithZone.ToLocalTime()
nowWithZone.ToOffset(TimeSpan.FromHours(+2.0))
、、 などDateTime
のプロパティを使用して通常に変換できます。nowWithZone.LocalDateTime
nowWithZone.UtcDateTime
nowWithZone.DateTime
最後に、これが難しすぎたり、ニーズに対して単純すぎる場合は、野田時間を使用する可能性があります。