ユーザーは、日付と時刻を別々のテキスト ボックスに入力します。次に、日付と時刻を結合して datetime にします。データベースに保存するには、この日時を UTC に変換する必要があります。ユーザーのタイムゾーンIDをデータベースに保存しています(登録時に選択します)。まず、次のことを試しました。
string userTimeZoneID = "sometimezone"; // Retrieved from database
TimeZoneInfo userTimeZone = TimeZoneInfo.FindSystemTimeZoneById(userTimeZoneID);
DateTime dateOnly = someDate;
DateTime timeOnly = someTime;
DateTime combinedDateTime = dateOnly.Add(timeOnly.TimeOfDay);
DateTime convertedTime = TimeZoneInfo.ConvertTimeToUtc(combinedDateTime, userTimeZone);
これにより、例外が発生しました。
The conversion could not be completed because the supplied DateTime did not have the Kind property set correctly. For example, when the Kind property is DateTimeKind.Local, the source time zone must be TimeZoneInfo.Local
次に、Kind プロパティを次のように設定してみました。
DateTime.SpecifyKind(combinedDateTime, DateTimeKind.Local);
これはうまくいかなかったので、私は試しました:
DateTime.SpecifyKind(combinedDateTime, DateTimeKind.Unspecified);
これもうまくいきませんでした。誰が私が何をする必要があるか説明できますか? 私はこれを正しい方法で行っていますか?DateTimeOffset を使用する必要がありますか?