Question DateTime Genre non spécifié


Sur msdn, il est défini pour le type non spécifié comme:

kind

Donc, si Kind n'est pas spécifié, DateTime est UTC, mais sur la même page (exemple donné):

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();
    }
  }
}

donnant la sortie comme:

Non spécifié: ..... 5/6/2005 14:34:42 PM, Kind = Unspecified

ToLocalTime: 5/6/2005 07:34:42 AM, Kind = Local

ToUniversalTime: 5/6/2005 21:34:42 PM, Kind = Utc

Donc, le problème que j'ai avec cela est que si Unspecified est Utc alors pourquoi la conversion Utc en Utc change la valeur de l'objet datetime?


19
2018-05-08 13:50


origine


Réponses:


Non, Non spécifié et UTC sont très différents - la page que vous citez provient de ToLocalTime. Le fait est que si vous appelez ToLocalTime en utilisant un "non spécifié" DateTime, alors la valeur sera traitée comme si c'était en UTC.

De même si vous appelez ToUniversalTime en utilisant un "non spécifié" DateTime, alors la valeur sera traitée comme si c'était dans le fuseau horaire local du système.

Franchement, ce genre de chose est la raison pour laquelle je n'aime pas DateTime plutôt beaucoup. Si j'étais toi, j'utiliserais Noda Time au lieu de cela, qui sépare complètement les concepts en différents types, éliminant une grande partie de la confusion. (Il y a plus de types à connaître, mais chacun représente un seul concept.) Je suis clairement biaisé ...


46
2018-05-08 13:53



Le DateTimeKind.Unspecified est utile dans les cas où vous ne souhaitez pas que l'heure soit convertie en une autre heure locale.

Prenons par exemple une application serveur qui affiche l'heure actuelle du serveur dans une application client. Si vous ne spécifiez pas DateTimeKind.Unspecified sur le serveur et que l'heure actuelle est extraite via un appel WCF, lorsque .ToString est appelé dans l'application cliente, il sera automatiquement converti dans le fuseau horaire local s'il est différent.


6
2017-10-23 17:10