2011-06-23 37 views
1

我需要的,如果日期是少於12個月比較C# 的日期,我需要設置一個布爾值如何比較的DateTime C#月和周

我的代碼是

String d = "26/06/10"; 
    DateTime dt = DateTime.ParseExact(d, "dd/MM/yy", null); 
    if ((dt > DateTime.Now.AddMonths(-12) )) 
    { 
     Console.WriteLine("It is less than 12 months"); 
    } 
    else 
    { 
     Console.WriteLine("It is more than 12 months"); 
    } 

是在c#中比較日期的最佳方法。 同樣地,我需要比較日期不到兩週的時間或不

任何幫助表示讚賞

感謝

+0

我認爲你現在正在做的是最好的方法。 – Magnus

回答

0

兩個星期:

if (dt1.Subtract(dt2).Days > 14) 
{ 
    ... 
} 

爲12個月(一年)(考慮每月的一天並不重要):

var monthDifference = ((dt1.Year - dt2.Year) * 12) + dt1.Month - dt2.Month 
+0

如果dt1 = 31 dec 2011和dt2 = 2012年1月1日,你的第二個例子是不是真的。這是OP真正想要的嗎? –

+0

嗯。你是對的。我沒有想到這一點。對不起,愚蠢的回答 – Kamyar

0

你可以做

DateTime date2 = DateTime.Now.AddMonths(-12); 
    //Or if you want to neglect the time part you could do 
DateTime date2 = new DateTime(DateTime.Now.Year,DateTime.Now.Month,DateTime.Now.Day,0,0,0).AddMonths(-12); 
String d = "26/06/10"; 
DateTime date1 = DateTime.ParseExact(d, "dd/MM/yy", null); 
int result = DateTime.Compare(date1, date2); 
string res; 

if (result < 0) 
    Console.WriteLine("It is less than 12 months"); 
else if (result == 0) 
    res = "is the equal";   
else 
    Console.WriteLine("It is more than 12 months"); 

的問題,您的代碼段,這將輸出「這是12個月以上」,即使日期是相等的。

2

你可以使用TimeSpan拿到兩個DateTime

之間的差異
String d = "26/06/10"; 
DateTime dt = DateTime.ParseExact(d, "dd/MM/yy", null); 
DateTime dt2 = DateTime.Now.AddMonths(-12); 

TimeSpan ts = dt - dt2; 

您可以使用ts.Days比較

+1

即使你使用TimeSpan'TotalDays'將會適當而不是'Days' – V4Vendetta

0

爲了更清楚地瞭解:你不想來比較兩個日期(或DateTime是否)但兩個TimeSpans。即現在的與您提供的日期之間的時間差異爲,並且時間跨度爲12個月。

String d = "26/06/10"; 
DateTime dt = DateTime.ParseExact(d, "dd/MM/yy", CultureInfo.InvariantCulture); 
TimeSpan deltaTimeSpan = dt - DateTime.Now;  // get the time difference between now and the time given 
TimeSpan twelveMonths = new TimeSpan(365,0,0,0); // get a time span of 12 months 

// round the amount of days down and always supply a positive number of days 
int deltaTime = Convert.ToInt32(Math.Abs(Math.Floor(deltaTimeSpan.TotalDays))); 

if (twelveMonths.TotalDays > deltaTime) 
{ 
    Console.WriteLine(string.Format("It is less than 12 months ({0} days).", deltaTime)); 
} 
else if (twelveMonths.TotalDays < deltaTime) 
{ 
    Console.WriteLine(string.Format("It is more than 12 months ({0} days).", deltaTime)); 
} 
else 
{ 
    Console.WriteLine(string.Format("The difference in time is exactly 12 months. ({0} days).", deltaTime); 
} 

請注意,這個例子當然不考慮閏年。代碼確實考慮了一年中的天氣與過去或未來的謊言進行比較(通過將TimeSpan轉換爲正值並與該值進行比較)。

調整上述代碼在兩週或任何其他時間範圍內執行相同操作應該足夠簡單。只要改變我命名爲「十二個月」的TimeSpan即可。

+1

你也可以使用TimeSpan.Duration來確保一個非負的TimeSpan。 –

0
DateTime date1 = DateTime.Now.AddMonths(-12) 
if(DateTime.Compare(dt, date1) 
{ 
//provided date is within 12 months 
} 
else 
{ 
//provided date is after 12 months 
}