Esta es una buena pregunta. Lo estoy reviviendo para dar un poco más de detalle sobre cómo .Net se comporta con diferentes Kindvalores. Como señala @ Jan Zich, en realidad es una propiedad de importancia crítica y se establece de manera diferente dependiendo de si se usa Nowo no UtcNow.
Internamente, la fecha se almacena como Ticksque (al contrario de la respuesta de @Carl Camera) es diferente dependiendo de si usa Nowo UtcNow.
DateTime.UtcNowse comporta como otros idiomas. Se establece Ticksen un valor basado en GMT. También se establece Kinden Utc.
DateTime.Nowaltera el Ticksvalor de lo que sería si fuera su hora del día en la zona horaria GMT . También se establece Kinden Local.
Si tiene 6 horas de retraso (GMT-6), obtendrá el tiempo GMT de hace 6 horas. .Net en realidad ignora Kindy trata esta vez como si fuera hace 6 horas, a pesar de que se supone que es "ahora". Esto se rompe aún más si crea una DateTimeinstancia, luego cambia su zona horaria e intenta usarla.
Las instancias de DateTime con diferentes valores 'Kind' NO son compatibles.
Veamos un código ...
DateTime utc = DateTime.UtcNow;
DateTime now = DateTime.Now;
Debug.Log (utc + " " + utc.Kind); // 05/20/2015 17:19:27 Utc
Debug.Log (now + " " + now.Kind); // 05/20/2015 10:19:27 Local
Debug.Log (utc.Ticks); // 635677391678617830
Debug.Log (now.Ticks); // 635677139678617840
now = now.AddHours(1);
TimeSpan diff = utc - now;
Debug.Log (diff); // 05:59:59.9999990
Debug.Log (utc < now); // false
Debug.Log (utc == now); // false
Debug.Log (utc > now); // true
Debug.Log (utc.ToUniversalTime() < now.ToUniversalTime()); // true
Debug.Log (utc.ToUniversalTime() == now.ToUniversalTime()); // false
Debug.Log (utc.ToUniversalTime() > now.ToUniversalTime()); // false
Debug.Log (utc.ToUniversalTime() - now.ToUniversalTime()); // -01:00:00.0000010
Como puede ver aquí, las comparaciones y las funciones matemáticas no se convierten automáticamente a tiempos compatibles. El Timespandebería haber sido casi una hora, pero en cambio era casi 6. "utc <ahora" debería haber sido cierto (incluso agregué una hora para estar seguro), pero aún así era falso.
También puede ver el 'trabajo' que consiste simplemente en convertir al tiempo universal en cualquier lugar que Kindno sea el mismo.
Mi respuesta directa a la pregunta está de acuerdo con la recomendación de la respuesta aceptada sobre cuándo usar cada una. Siempre debe intentar trabajar con DateTimeobjetos que lo tengan Kind=Utc, excepto durante la E / S (visualización y análisis). Esto significa que casi siempre debería usarlo DateTime.UtcNow, excepto en los casos en que está creando el objeto solo para mostrarlo y descartarlo de inmediato.