2013-05-08 2 views
17

On msdn it is defined for Unspecified Kind as:DateTime Неизвестно Вид

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 2:34:42 PM, Kind = Не выбрано

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

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

Итак, проблема у меня с этим, что если выбрано это Utc то почему Utc для преобразования Utc изменить значение объекта типа DateTime?

ответ

42

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

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

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

3

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

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

Смежные вопросы