it-swarm-tr.com

Bir DateTime'ın C # 'daki diğerinden büyük olup olmadığını kontrol etme

İki DateTime nesnem var: StartDate ve EndDate. StartDate öğesinin EndDate öğesinden önce olduğundan emin olmak istiyorum. Bu C # ile nasıl yapılır?

84
Brian G
if (StartDate < EndDate)
   // code

sadece tarih istiyorsan, zamanı değil

if (StartDate.Date < EndDate.Date)
    // code
172
Darren Kopp
if(StartDate < EndDate)
{}

DateTime normal karşılaştırma işleçlerini destekler.

24
Ryan Rinaldi

Aşırı yüklenmiş <veya> operatörlerini kullanabilirsiniz.

Örneğin:

DateTime d1 = new DateTime(2008, 1, 1);
DateTime d2 = new DateTime(2008, 1, 2);
if (d1 < d2) { ...
21
Ben Hoffstein
if(dateTimeA > dateTimeB) Console.WriteLine("Do your own homework");
20
Jon Galloway
if (StartDate>=EndDate)
{
    throw new InvalidOperationException("Ack!  StartDate is not before EndDate!");
}
8
Ian Nelson
StartDate < EndDate
6
Rob Gray

DateTime.Compare yöntemine göz atın 

5
EvilEddie

Muhtemelen çok geç, ancak buna rastlayacak diğer insanlara fayda sağlamak için, buna benzer IComparable kullanarak bunu yapmak için bir uzatma yöntemi kullandım: 

public static class BetweenExtension
    {
        public static bool IsBetween<T>(this T value, T min, T max) where T : IComparable
        {
            return (min.CompareTo(value) <= 0) && (value.CompareTo(max) <= 0);
        }
    }

Bu uzantı yöntemini IComparable ile kullanmak bu yöntemi daha genel hale getirir ve yalnızca tarihlerle değil, çok çeşitli veri türleriyle de kullanılabilir hale getirir.

Bunu böyle kullanırsın:

DateTime start = new DateTime(2015,1,1);
DateTime end = new DateTime(2015,12,31);
DateTime now = new DateTime(2015,8,20);

if(now.IsBetween(start, end))
{
     //Your code here
}
4
rottenbanana

Aynı şarttaydım, ancak kabul edilen cevabı kullanırken, tüm ünite sınavlarımı yerine getirmedi. Benim için mesele, Başlangıç ​​ve Bitiş tarihleri ​​olan yeni bir nesneniz olduğunda ve Başlangıç ​​tarihini ayarlamanız gerektiğidir (bu aşamada Bitiş tarihiniz 01.01.2001 tarih tarihinin en düşük değerine sahiptir) - bu çözüm başarılı benim birim testleri:

    public DateTime Start
    {
        get { return _start; }
        set
        {
            if (_end.Equals(DateTime.MinValue))
            {
                _start = value;
            }
            else if (value.Date < _end.Date)
            {
                _start = value;
            }
            else
            {
                throw new ArgumentException("Start date must be before the End date.");
            }
        }
    }


    public DateTime End
    {
        get { return _end; }
        set
        {
            if (_start.Equals(DateTime.MinValue))
            {
                _end = value;
            }
            else if (value.Date > _start.Date)
            {
                _end = value;
            }
            else
            {
                throw new ArgumentException("End date must be after the Start date.");
            }
        }
    }

Hem Başlangıç ​​hem de Bitiş tarihlerinin 01/01/0001 olabileceği Kenar durumunu özlüyor, ancak bununla ilgilenmiyorum.

3
John J Smith
        if (new DateTime(5000) > new DateTime(1000))
        {
            Console.WriteLine("i win");
        }
2
Loren Segal

Eğer dönüştürürseniz, saat/dakika/saniye vb. İçin endişelenmenize gerek olmadığını söyleyin.

    [Test]
    public void ConvertToDateWillHaveTwoDatesEqual()
    {
        DateTime d1 = new DateTime(2008, 1, 1);
        DateTime d2 = new DateTime(2008, 1, 2);
        Assert.IsTrue(d1 < d2);

        DateTime d3 = new DateTime(2008, 1, 1,7,0,0);
        DateTime d4 = new DateTime(2008, 1, 1,10,0,0);
        Assert.IsTrue(d3 < d4);
        Assert.IsFalse(d3.Date < d4.Date);
    }
0
sapbucket

ASP.NET'te çalışıyorsanız, iki CalendarExtender nesnesi arasındaki değerleri karşılaştırmanız gerekiyorsa, tarihleri ​​karşılaştırma şekliniz biraz farklıdır, ancak yine de aynıdır.

if(calStartDate.SelectedDate > calEndDate.SelectedDate) {
 MessageBox.ShowMessage("That's not how time works.");
}

CalStartDate ve calEndDate uygulamasının CalendarExtenders sunucunuzun kimliği olarak ayarlandığı yer.

0
AlRey