2014-10-22 28 views
1

相當不錯的問題,但我很困惑如何簡化此代碼並使其更高效。C#中的本月當前月#

我想從當前月份的前3個月,而不是從當天(DateTime.Today)

這裏一個月是我的代碼:

public int NumberTicketsThreeMonthsAgo 
{ 
    get { return AllTickets.Count(t => DateTime.Today.AddMonths(-3) < t.CreateDateTime); } 
} 

謝謝:)

+7

恐怕我不知道ND。 *當前月份將如何與當前*月份的月份不同? – 2014-10-22 08:42:52

+1

也許將'Day'設置爲'1'? – nvoigt 2014-10-22 08:44:57

+0

我想所以你的意思是說:今天是十月二十二號,那麼你想要的7月1日是3個月前排除當前月份。這樣對嗎? – 2014-10-22 08:46:26

回答

1

這可能給出正確的邏輯:

public int NumberTicketsThreeMonthsAgo 
{ 
    DateTime dt = new DateTime(DateTime.Today.Year, DateTime.Today.Month, 
             1).AddMonths(-3); 
    get { return AllTickets.Count(t => dt < t.CreateDateTime); } 
} 
+0

謝謝:)這回答了我的問題,並解釋了我也需要做的! – 2014-10-22 09:20:01

0

試試這個:

public int NumberTicketsThreeMonthsAgo 
{ 
    get 
    { 
     var earliestDate = new DateTime(DateTime.Today.Year, 
             DateTime.Today.Month, 
             1).AddMonths(-3); 
     return AllTickets.Count(t => earliestDate < t.CreateDateTime); 
    } 
} 
+0

謝謝,這真的很有幫助! – 2014-10-22 09:20:54

-2

我並不清楚理解,但我認爲這是ü想什麼,

MessageBox.Show("" + System.DateTime.Now.AddMonths(-3).Month); 
+2

不知道這是如何得到upvoted,因爲它在許多方面是錯誤的。 – DavidG 2014-10-22 08:52:35

0
public int NumberTicketsThreeMonthsAgo 
{ 
    get { AllTickets.Count(t => t > new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1).AddMonths(-3)); } 
} 
+0

這不會超過一年的界限。 – DavidG 2014-10-22 08:48:34

+0

在1月份用日期進行測試。所有月份''-2' – 2014-10-22 08:48:42

+0

這是真的,將修改爲使用DateTime.AddMonths(-3) – 2014-10-22 08:50:59

0

我將存儲新的日期作爲變量和傳遞,而不是多次評估它,它,也從一個屬性更改爲一個方法

public int NumberTicketsThreeMonthsAgo(IEnumerable<Ticket> tickets) 
{ 
    var startDate = new DateTime(DateTime.Today.Year, DateTime.Today.Month, 1).AddMonths(-3); 
    return tickets.Count(t => startDate < t.CreateDateTime); 
} 
0

我想你想要一個類似於DateTime.Today的功能,但是會返回給定DateTime的第一天的方法。您可以使用此extension method

public static DateTime MonthDayOne(this DateTime date) 
{ 
    return new DateTime(date.Year, date.Month, 1); 
} 

現在這個工作並返回7月1日:

DateTime threeMonthsAgo = DateTime.Now.AddMonths(-3).MonthDayOne(); 
+0

'AddMonths(-3).MonthDayOne()'和'MonthDayOne().AddMonths(-3)'可能是微妙地不同,然後第二種形式似乎更明智。此外,「現在」不如「今天」適合。 – 2014-10-22 08:55:23

+0

@HenkHolterman:我不明白這兩個疑惑。該方法本身就是OP所要求的。我如何使用它的方式與如何獲得給定月份的第一天無關。我已經使用'Now'來證明時間無關緊要,以強調與'DateTime.Today'的相似性。 – 2014-10-22 09:02:35

+0

是的,DateTime將在2月30日剪輯。幽靈,但它使2個電話相同。但是,你用'Now'來表達一個觀點很容易失去,在現實生活中,這隻會是錯的。 – 2014-10-22 09:46:11

-1

試試這個

public int NumberTicketsThreeMonthsAgo 
{ 
    get 
    { 
     new DateTime(DateTime.Today.Year, DateTime.Today.Month, 1).AddMonths(-3) 
    } 
}