34

msdn では、Unspecified Kind に対して次のように定義されています。

親切

したがって、Kind が指定されていない場合、DateTime は UTC ですが、同じページにあります (例を示します)。

class Sample 
{
    public static void Main() 
    {
      DateTime saveNow = DateTime.Now;
      myDt = DateTime.SpecifyKind(saveNow, DateTimeKind.Unspecified);
      Display("Unspecified: .....", myDt);
    }

    public static string datePatt = @"M/d/yyyy hh:mm:ss tt";

    public static void Display(string title, DateTime inputDt)
    {
      DateTime dispDt = inputDt;
      string dtString;
    
      dtString = dispDt.ToString(datePatt);
      Console.WriteLine("{0} {1}, Kind = {2}", title, dtString, dispDt.Kind);

      dispDt = inputDt.ToLocalTime();
      dtString = dispDt.ToString(datePatt);
      Console.WriteLine("  ToLocalTime:     {0}, Kind = {1}", dtString, dispDt.Kind);

      dispDt = inputDt.ToUniversalTime();
      dtString = dispDt.ToString(datePatt);
      Console.WriteLine("  ToUniversalTime: {0}, Kind = {1}", dtString, dispDt.Kind);
      Console.WriteLine();
    }
  }
}

出力を次のように与えます。

不明: ..... 5/6/2005 02:34:42 PM、種類 = 不明

ToLocalTime: 5/6/2005 07:34:42 AM、種類 = ローカル

ToUniversalTime: 5/6/2005 09:34:42 PM、Kind = Utc

したがって、これに関する問題は、Unspecified が Utc の場合、なぜ Utc から Utc への変換で datetime オブジェクトの値が変更されるのかということです。

4

2 に答える 2

77

いいえ、Unspecified と UTC は大きく異なります。引用元のページはToLocalTime. ポイントはToLocalTime、「unspecified」を使用して呼び出すと、値がUTC であるかDateTimeのように扱われることです。

同様にToUniversalTime、「unspecified」を使用して呼び出した場合、値はシステムのローカル タイム ゾーンにあるかのDateTimeように扱われます。

ぶっちゃけこういうのは結構嫌いDateTimeです。私があなたなら、代わりにNoda Timeを使用します。これにより、概念がさまざまなタイプに完全に分離され、多くの混乱が解消されます。(知っておくべきタイプは他にもありますが、それぞれが単一の概念を表しています。)私は明らかに偏っていますが...

于 2013-05-08T13:53:22.650 に答える