İki DateTimenesnem var: StartDateve EndDate. StartDateÖnceden olduğundan emin olmak istiyorum EndDate. Bu C # ile nasıl yapılır?
Yanıtlar:
if (StartDate < EndDate)
// code
sadece tarihleri istiyorsan, zamanı değil
if (StartDate.Date < EndDate.Date)
// code
if(StartDate < EndDate)
{}
DateTime normal karşılaştırma işleçlerini destekler.
if(dateTimeA > dateTimeB) Console.WriteLine("Do your own homework");
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 (StartDate>=EndDate)
{
throw new InvalidOperationException("Ack! StartDate is not before EndDate!");
}
Bu muhtemelen çok geç, ancak bununla karşılaşabilecek diğer insanlara fayda sağlamak için, bunu şu şekilde yapan bir uzatma yöntemi kullandım IComparable:
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 kullanmak IComparable, bu yöntemi daha genel hale getirir ve yalnızca tarihlerle değil, çok çeşitli veri türleriyle kullanılabilir hale getirir.
Bunu şu şekilde 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ı gereksinime sahiptim, ancak kabul edilen cevabı kullanırken, tüm birim testlerimi karşılamadı. Benim için sorun, 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/0001 minimum tarih değerine sahiptir) - bu çözüm hepsini geçti birim testlerim:
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 uç durumu gözden kaçırıyor, ancak bununla ilgilenmiyorum.
if (new DateTime(5000) > new DateTime(1000))
{
Console.WriteLine("i win");
}
.Date'e dönüştürürseniz saat / dakika / saniye vb. İçin endişelenmenize gerek olmadığını göstermek isterim:
[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);
}