DateTime C # ile nasıl karşılaştırılır?


137

Kullanıcının geri tarih veya saat vermesini istemiyorum.

Girilen tarih ve saatin geçerli saatten DAHA AZ olup olmadığını nasıl karşılaştırabilirim?

Geçerli tarih ve saat 17 Haziran 2010, 12: 25 PM ise, kullanıcının 17 Haziran -2010 tarihinden önce ve 12:25 PM'den önce tarih vermesini istiyorum.

Kullanıcı tarafından girilen zaman 16 Haziran 2010 ve saat 12:24

Yanıtlar:


179

MSDN: DateTime.Compare

DateTime date1 = new DateTime(2009, 8, 1, 0, 0, 0);
DateTime date2 = new DateTime(2009, 8, 1, 12, 0, 0);
int result = DateTime.Compare(date1, date2);
string relationship;

if (result < 0)
   relationship = "is earlier than";
else if (result == 0)
   relationship = "is the same time as";         
else
   relationship = "is later than";

Console.WriteLine("{0} {1} {2}", date1, relationship, date2);
// The example displays the following output:
//    8/1/2009 12:00:00 AM is earlier than 8/1/2009 12:00:00 PM

3
Cevabınız, tarihin önce veya sonra olduğunu bilmek yerine farkın ne olduğunu görmek için bir yol sağlar. Tabii ki cevabı OP için daha iyidir, ancak sizinki google'dan (kendi kendine dahil) buraya gelen bazı insanlar için daha iyidir.
levininja

2
Cevabınızı değerli buldum çünkü bunun kullanıldığı eski bir koda bakıyorum
Erik Bergstedt


Ancak hata ayıklama açısından MuSTaNG'nin cevabı daha okunabilir.
Himalaya Garg

295

Microsoft ayrıca '<' ve '>' operatörlerini de uygulamıştır. Bunları iki tarihi karşılaştırmak için kullanırsınız.

if (date1 < DateTime.Now)
   Console.WriteLine("Less than the current time!");

6
Kaynak MSDN; bunlar DateTime Operatörleri olarak "DateTime.Greater than", "DateTime.LessThanOrEqualTo" ..... olarak etiketlenmiştir. msdn.microsoft.com/en-us/library/ff986512%28v=vs.90%29.aspx
Salman Siddiqui


2
Unity 2017 kullanıyorum ve listeleri sıralamak için bu operatörü kullanıyorum, bana yanlış sonuçlar veriyor. Hatta DateTime.ticks doğrudan karşılaştırmak için çalıştı ve bu da başarısız oldu. Doğru sonuçlara ulaşmak için DateTime.CompareTo kullanmalıydım ve nedenini bilmiyorum.
lin

2
Bu yanlış. Bu UTC ve Yerel Saati doğru şekilde karşılaştıramaz.
Altiano Gerung

4
Bu tam bir cevap değil. DateTime Kind'ı ocnsideration'a alırken ya date1.ToLocalTime() < DateTime.Nowya olmalıdır date1.ToUniversalTime() < DateTime.UtcNow.
yurislav

21

MuSTaNG'nin cevabı her şeyi söylüyor, ama yine de bağlantıları ve her şeyi içeren biraz daha ayrıntılı hale getirmek için ekliyorum.


Geleneksel operatörler

DateTime.NET Framework 1.1'den beri kullanılabilir . Ayrıca, DateTimekonvansiyonel operatörler +ve kullanılarak nesnelerin toplanması ve çıkarılması da mümkündür -.

MSDN'den bir örnek:

Eşitlik:
System.DateTime april19 = new DateTime(2001, 4, 19);
System.DateTime otherDate = new DateTime(1991, 6, 5);

// areEqual gets false.
bool areEqual = april19 == otherDate;

otherDate = new DateTime(2001, 4, 19);
// areEqual gets true.
areEqual = april19 == otherDate;

Diğer operatörler de benzer şekilde kullanılabilir.

İşte liste tüm operatörler için geçerli DateTime.


1
Sadece ayrıntılı olarak cevaplarını düzenleyebilirsiniz. Her durumda, +iki DateTimeişlenen için kullanamazsınız , Yapabilirsiniz DateTime - DateTime, veya DateTime + TimeSpan, veya DateTime - TimeSpan.
Joey

5

Genel durumda karşılaştırmak gerekir DateTimesaynı olan Kind:

if (date1.ToUniversalTime() < date2.ToUniversalTime())
    Console.WriteLine("date1 is earlier than date2");

Dan Açıklama MSDN hakkında DateTime.Compare(Bu ayrıca gibi operatörler için geçerlidir >, <, ==vb):

T1 ile t2 arasındaki ilişkiyi belirlemek için, Compare yöntemi t1 ve t2'nin Ticks özelliğini karşılaştırır, ancak Kind özelliklerini yok sayar . DateTime nesnelerini karşılaştırmadan önce, nesnelerin aynı saat dilimindeki saatleri temsil ettiğinden emin olun.

Bu nedenle, basit bir karşılaştırma, DateTimesfarklı zaman dilimlerinde temsil edilenlerle uğraşırken beklenmedik bir sonuç verebilir .


Bu yüzden sadece bir hata vardı ... wth bu yöntemi yaptıkları zaman düşünüyorlardı :(
Legolas

3

Aynı görünen iki DateTime'ınız varsa, ancak Karşılaştır veya Eşittir beklediğinizi döndürmezse, bunları nasıl karşılaştırırsınız.

Burada 1 milisaniyelik hassasiyetle bir örnek:

bool areSame = (date1 - date2) > TimeSpan.FromMilliseconds(1d);

1
//Time compare.
private int CompareTime(string t1, string t2)
{
    TimeSpan s1 = TimeSpan.Parse(t1);
    TimeSpan s2 = TimeSpan.Parse(t2);
    return s2.CompareTo(s1);
}

2
Karşılaştırmak DateTimeistemiyorstring
Danh

tarih saatini dizeye dönüştürebilirsiniz
Dieu Phan Dinh

veya: kullanabilirsiniz: DateTime.Compare (startDate, endDate)
Dieu Phan Dinh

Benim sorunum değil ve Ahmet'in farkı mı?
Danh

0

İşte Unity ortamında tipik basit bir örnek

using UnityEngine;

public class Launch : MonoBehaviour
{
    void Start()
    {
        Debug.Log("today " + System.DateTime.Now.ToString("MM/dd/yyyy"));

        // don't allow the app to be run after June 10th
        System.DateTime lastDay = new System.DateTime(2020, 6, 10);
        System.DateTime today = System.DateTime.Now;

        if (lastDay < today) {
            Debug.Log("quit the app");
            Application.Quit();
        }
        UnityEngine.SceneManagement.SceneManager.LoadScene("Welcome");
    }
}

-3
public static bool CompareDateTimes(this DateTime firstDate, DateTime secondDate) 
{
   return firstDate.Day == secondDate.Day && firstDate.Month == secondDate.Month && firstDate.Year == secondDate.Year;
}

4
.NET'te "Karşılaştır" genellikle "eşitlik denetimi" değil, "göreli karşılaştırma" anlamına gelir. Buradaki soru göreceli karşılaştırma ile ilgiliydi. Ayrıca, kodu düzgün bir şekilde biçimlendirmek için hiçbir çaba göstermediniz.
Lasse V. Karlsen
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.