계정이 30 일 이내에 만료되는지 알아 보려고합니다. DateTime Compare를 올바르게 사용하고 있습니까?
if (DateTime.Compare(expiryDate, now) < 30)
{
matchFound = true;
}
답변:
DateTime Compare를 올바르게 사용하고 있습니까?
아니요. Compare
두 날짜의 상대적 위치에 대한 정보 만 제공합니다 : 작거나 같거나 큰 날짜. 당신이 원하는 것은 다음과 같습니다.
if ((expiryDate - DateTime.Now).TotalDays < 30)
matchFound = true;
이것은 두 개의 DateTime
s를 뺍니다 . 결과는 속성 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;
}
}