私はこれを理解しようと午後中ずっと頭を悩ませてきました。基本的に、問題自体は単純に見えます。別のタイムゾーン(ローカルではない)の日付と時刻を表す日付/時刻が与えられます。この値をUTC値に変換して、データベースに保存したいと思います。ただし、オンラインで見つけたすべての方法は、UTCで開始するか、ローカルタイムゾーンで開始することを示しているようです。これらから他のタイムゾーンに変換することはできますが、それ以外のものから始めることはできません。結果として、私がやりたいことをするために、ある種の複雑なオフセット計算をしなければならないように思われます。問題の例を次に示します。
var dateString = "8/20/2014 6:00:00 AM";
DateTime date1 = DateTime.Parse(dateString,
System.Globalization.CultureInfo.InvariantCulture);
var currentTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time");
// Now the server is set to Central Standard Time, so any automated offset calculation that it runs will come from that point of view:
var utcDate = date1.ToUniversalTime; // This is wrong
// Similarly, if I try to reverse-calculate it, it doesn't work either
var convertedDate = TimeZoneInfo.ConvertTime(date1, currentTimeZone);
utcDate = convertedDate.ToUniversalTime; // This is also wrong
要するに、私は何とか私は現在で働いているdatetimeオブジェクトがいることをシステムに伝えたいですローカル以外のその時間帯から、私は知っている変換が正しくなります。最終的には夏時間を計算する必要があることはわかっていますが、それは別の日の問題です。
この方法はあなたにとって役に立ちますか?
TimeZoneInfo.ConvertTimeメソッドは、時間をあるタイムゾーンから別のタイムゾーンに変換します。
または、このConvertTimeToUtc
方法を使用して、任意の日付(ソースタイムゾーンを指定)をUTCに単純に変換することもできます。
var dateString = "8/20/2014 6:00:00 AM";
DateTime date1 = DateTime.Parse(dateString,
System.Globalization.CultureInfo.InvariantCulture);
var currentTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time");
var utcDate = TimeZoneInfo.ConvertTimeToUtc(date1, currentTimeZone);
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加