KindプロパティがDateTimeKind.Unspecifiedである非常に多くのDateTimeを持つC#コードを継承しました。これらはDatetime.ToUniversalTime()に供給され、UTC日時が返されます(私の場合は7時間追加されます)。これがToUniversalTime()の仕組みです。 MSDNを参照してください。問題は、これらのDateTimesが実際には既にUTC時間になっていることです。それらは、SQL Server Compact 4.0データベースから取り出されます。それらはUTCで保存されました。私の主な質問は:
フォローアップの質問に満足できたら、次のようになります。
詳細を提供できるかどうか教えてください。私はこのコードベースは初めてですが、まだ頭を悩ませているので、問題を完全に説明するのに苦労しています。
デイブ
次のようなものが必要ですか?
_var unspecified = new DateTime(2016, 12, 12, 10, 10, 10, DateTimeKind.Unspecified);
var specified = DateTime.SpecifyKind(unspecified, DateTimeKind.Utc);
_
[〜#〜] msdn [〜#〜] :からのSpecifyKind()
メソッドについて
SpecifyKindメソッドは、指定されたkindパラメーターと元の時刻値を使用して、新しいDateTimeオブジェクトを作成します。
新しいオブジェクト、新しい種類、同じ時間値を作成します。既存のオブジェクトの種類を変更することはできません。同じ値で異なる種類の新しいオブジェクトを作成する必要があります。
ここの他の質問に関しては、 SQL Compact でサポートされているタイプです。そして、これは DateTimeOffset に関する問題です。 Sql Compactではまだサポートされていないようです。
私は拡張メソッドを使用します:
_public static DateTime SetKind(this DateTime DT, DateTimeKind DTKind)
{
var NewDT = New DateTime(DT.Year, DT.Month, DT.Day, DT.Hour, DT.Minute, DT.Second, DT.Millisecond, DTKind);
Return NewDT;
}
_
これは、DateTime.SpecifyKind(unspecified, DateTimeKind.Utc)
を毎回入力するよりも、LINQで使用する方がはるかに短いです。
例えば:
_table.Where((x) x.StartTimeStampUTC.SetKind(DateTimeKind.Utc).ToString("G") = GUIStartTimeStampTxt.Text)
_
上記の2つの答えを組み合わせて、よりクリーンなソリューションを得ることができます...
public static DateTime SetKind(this DateTime DT, DateTimeKind DTKind)
{
return DateTime.SpecifyKind(DT, DTKind);
}