계정이 30 일 이내에 만료되는지 알아 보려고합니다. DateTime Compare를 올바르게 사용하고 있습니까?
if (DateTime.Compare(expiryDate, now) < 30)
{
matchFound = true;
}
답변:
DateTime Compare를 올바르게 사용하고 있습니까?
아니요. Compare두 날짜의 상대적 위치에 대한 정보 만 제공합니다 : 작거나 같거나 큰 날짜. 당신이 원하는 것은 다음과 같습니다.
if ((expiryDate - DateTime.Now).TotalDays < 30)
matchFound = true;
이것은 두 개의 DateTimes를 뺍니다 . 결과는 속성 TimeSpan을 가진 객체입니다 TotalDays.
또한 조건문은 다음과 같이 직접 작성할 수 있습니다.
matchFound = (expiryDate - DateTime.Now).TotalDays < 30;
if필요 하지 않습니다.
TotalDays일 대신 사용하십시오 .
Days의 가장 큰 구성 요소 이기 때문에 차이가 없습니다 TimeSpan. 이것을 읽는 사람들은 Seconds재산이 같은 방식으로 작동 한다고 생각하기 위해 그것을 추론 할 수 있습니다 .
Days그 자체도 틀릴 수 있습니다. Days그리고 TotalDays조건이있는 경우에만 있기 때문에 여기에 같은입니다 < 30,하지만 그것이 경우에 분명한 차이가있을 것입니다 <= 30, 때문에 TotalDays같은 5 월 반환 뭔가 30.421동안 Days여전히 반환 30.
해야한다
matchFound = (expiryDate - DateTime.Now).TotalDays < 30;
총 일수를 기록하십시오. 그렇지 않으면 이상한 행동이 나타납니다.
TotalDays는 개념적 으로 사용하기에 올바른 필드입니다. 실제로는 동일한 결과를 제공 Days하지만는의 가장 큰 구성 요소 이기 때문에 TimeSpan월 또는 년 구성 요소가 있었고 이것은 다른 이야기가되었을 것입니다. 그냥와 시도 Hours, Seconds또는 Milliseconds그들이 어떻게 작동하는지 볼 수 있습니다.
대신 이것을 시도하십시오
if ( (expiryDate - DateTime.Now ).TotalDays < 30 ) {
matchFound = true;
}
에 할당 false(해당되는 경우) 한다고 가정하면 matchtime더 간단한 작성 방법이됩니다.
matchtime = ((expiryDate - DateTime.Now).TotalDays < 30);
아니요, 올바르게 사용하고 있지 않습니다.
DateTime t1 = new DateTime(100);
DateTime t2 = new DateTime(20);
if (DateTime.Compare(t1, t2) > 0) Console.WriteLine("t1 > t2");
if (DateTime.Compare(t1, t2) == 0) Console.WriteLine("t1 == t2");
if (DateTime.Compare(t1, t2) < 0) Console.WriteLine("t1 < t2");
실제로 이러한 답변 중 어느 것도 나를 위해 일하지 않았습니다. 다음과 같이 해결했습니다.
if ((expireDate.Date - DateTime.Now).Days > -30)
{
matchFound = true;
}
내가 이것을 시도했을 때 :
matchFound = (expiryDate - DateTime.Now).Days < 30;
오늘, 2011-11-14이고 내 expiryDate는 2011-10-17이었습니다. matchFound = -28을 얻었습니다. 28 대신에. 그래서 나는 마지막 수표를 뒤집었다.
// this isn't set up for good processing.
//I don't know what data set has the expiration
//dates of your accounts. I assume a list.
// matchfound is a single variablethat returns true if any 1 record is expired.
bool matchFound = false;
DateTime dateOfExpiration = DateTime.Today.AddDays(-30);
List<DateTime> accountExpireDates = new List<DateTime>();
foreach (DateTime date in accountExpireDates)
{
if (DateTime.Compare(dateOfExpiration, date) != -1)
{
matchFound = true;
}
}