Bu iyi bir soru. .Net'in farklı Kinddeğerlerle nasıl davrandığı hakkında biraz daha ayrıntılı bilgi vermek için canlandırıyorum . @Jan Zich'in de belirttiği gibi, aslında kritik öneme sahip bir özelliktir Nowveya kullanmanıza bağlı olarak farklı ayarlanmıştır UtcNow.
Dahili olarak tarih, Ticks(@Carl Camera yanıtının aksine) Nowveya kullanmanıza bağlı olarak farklı olarak kaydedilir UtcNow.
DateTime.UtcNowdiğer diller gibi davranır. TicksGMT tabanlı bir değere ayarlar . Ayrıca ayarlar Kindiçin Utc.
DateTime.NowGMT saat diliminde günün saati olsaydıTicks değeri olacağı değere değiştirir . Ayrıca ayarlar Kindiçin Local.
6 saat gerideyseniz (GMT-6), GMT süresini 6 saat öncesinden alacaksınız. .Net Kind, "şimdi" olması gerekiyorsa bile, bu kez 6 saat önceki gibi görmezden gelir ve davranır. Bir DateTimeörnek oluşturup saat diliminizi değiştirip kullanmaya çalıştığınızda bu durum daha da kırılır .
Farklı 'Tür' değerlerine sahip DateTime örnekleri uyumlu DEĞİLDİR.
Bazı kodlara bakalım ...
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
Burada görebileceğiniz gibi, karşılaştırmalar ve matematik fonksiyonları otomatik olarak uyumlu zamanlara dönüşmez. TimespanNeredeyse bir saat oldu, ancak bunun yerine neredeyse 6. oldu gerekirdi "utc <artık" (Ben bile emin olmak için bir saat eklendi) gerçek olması gerekirdi, ama yine de yanlıştı.
Ayrıca Kind, aynı olmayan herhangi bir yerde evrensel zamana dönüşecek olan 'geçici çözüm' de görebilirsiniz .
Soruya doğrudan cevabım, kabul edilen cevapların her birinin ne zaman kullanılacağına dair önerisine uyuyor. G / Ç (görüntüleme ve ayrıştırma) dışında her zaman sahip nesnelerle çalışmayı denemelisiniz . Bu , nesneyi yalnızca görüntülemek için oluşturduğunuz ve hemen attığınız durumlar dışında, neredeyse her zaman kullanmanız gerektiği anlamına gelir .DateTimeKind=UtcDateTime.UtcNow