Bu iyi bir soru. .Net'in farklı Kind
değ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 Now
veya kullanmanıza bağlı olarak farklı ayarlanmıştır UtcNow
.
Dahili olarak tarih, Ticks
(@Carl Camera yanıtının aksine) Now
veya kullanmanıza bağlı olarak farklı olarak kaydedilir UtcNow
.
DateTime.UtcNow
diğer diller gibi davranır. Ticks
GMT tabanlı bir değere ayarlar . Ayrıca ayarlar Kind
için Utc
.
DateTime.Now
GMT saat diliminde günün saati olsaydıTicks
değeri olacağı değere değiştirir . Ayrıca ayarlar Kind
iç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. Timespan
Neredeyse 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 .DateTime
Kind=Utc
DateTime.UtcNow