Подтвердить что ты не робот

DateTime Unspecified Kind

В msdn он определен для Unspecified Kind как:

kind

Итак, если Kind is unspecified 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();
    }
  }
}

выводящий как:

Unspecified:..... 5/6/2005 02:34:42 PM, Kind = Unspecified

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

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

Итак, проблема с этим заключается в том, что если Unspecified является Utc, то почему преобразование Utc to Utc изменяет значение объекта datetime?

4b9b3361

Ответ 1

Нет, Unspecified и UTC очень разные - страница, на которую вы указываете, находится от ToLocalTime. Дело в том, что если вы вызываете ToLocalTime с помощью "неуказанного" DateTime, тогда значение будет обрабатываться так, как если бы оно было в формате UTC.

Аналогично, если вы вызываете ToUniversalTime с помощью "неуказанного" DateTime, тогда значение будет обрабатываться так, как если бы оно было в локальном часовом поясе системы.

Откровенно говоря, это то, почему Мне не нравится DateTime довольно много. Если бы я был вами, я использовал бы Noda Time, который полностью разделяет концепции на разные типы, устраняя много путаницы. (Есть больше типов, о которых нужно знать, но каждый из них представляет собой единую концепцию.) Я явно предвзято, хотя...

Ответ 2

DateTimeKind.Unspecified полезен в случаях, когда вы не хотите, чтобы время было преобразовано в другое локальное время.

Возьмем, например, серверное приложение, которое отображает текущее время для сервера в клиентском приложении. Если вы не укажете DateTimeKind.Unspecified на сервере и текущее время будет получено через вызов WCF, тогда, когда в клиентском приложении вызывается .ToString, оно будет автоматически преобразовано в локальный часовой пояс, если они отличаются.