İ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?
if (StartDate < EndDate)
// code
sadece tarih istiyorsan, zamanı değil
if (StartDate.Date < EndDate.Date)
// code
if(StartDate < EndDate)
{}
DateTime normal karşılaştırma işleçlerini destekler.
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) { ...
if(dateTimeA > dateTimeB) Console.WriteLine("Do your own homework");
if (StartDate>=EndDate)
{
throw new InvalidOperationException("Ack! StartDate is not before EndDate!");
}
StartDate < EndDate
DateTime.Compare yöntemine göz atın
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
}
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.
if (new DateTime(5000) > new DateTime(1000))
{
Console.WriteLine("i win");
}
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);
}
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.