如何獲得C#中沒有星期五和星期六的一個月內的天數?如何在沒有周末的情況下獲取DateTime.DaysInMonth?
2
A
回答
6
這裏,快速和骯髒的:
class Program
{
static void Main(string[] args)
{
int month = DateTime.Today.Month;
int year = DateTime.Today.Year;
int daysInMonthMinusFridayAndSaturday = 0;
for (int i = 1; i <= DateTime.DaysInMonth(year,month); i++)
{
DateTime thisDay = new DateTime(year,month,i);
if(thisDay.DayOfWeek != DayOfWeek.Friday && thisDay.DayOfWeek != DayOfWeek.Saturday)
{
daysInMonthMinusFridayAndSaturday += 1;
}
}
Console.WriteLine(daysInMonthMinusFridayAndSaturday);
Console.ReadLine();
}
}
1
我會避免循環或迭代,做這樣的:
int GetWorkDays(int year, int month)
{
var firstDayOfMonth = new DateTime(year, month, 1).DayOfWeek;
var daysInMonth = DateTime.DaysInMonth(year, month);
// count whole weeks first
var wholeWeeks = daysInMonth/7;
var extraDays = daysInMonth % 7;
// calculate the overlap of the "remainder days" with the weekend.
var lastDayOfMonth = (int) (firstDayOfMonth + extraDays - 1);
var overlapStart = Math.Max((int) firstDayOfMonth, (int) DayOfWeek.Friday);
var overlapEnd = Math.Min(lastDayOfMonth, (int) DayOfWeek.Saturday);
var weekendOverlap = Math.Max(0, overlapEnd - overlapStart + 1);
// substract weekend days
return daysInMonth - wholeWeeks * 2 - weekendOverlap;
}
+0
爲什麼要關心一些如此簡單的性能的一點點?這並不是說最糟糕的情況下會花費幾個毫秒。 – 2010-12-19 10:18:38
+1
@Camilo Martin:因爲它更好:)我同意沒有現實生活中的意義。至少在有人發明真正漫長的月份之前。 – Ran 2010-12-19 10:20:34
6
強制性LINQ的解決方案:
int days = Enumerable.Range(1, DateTime.DaysInMonth(year, month))
.Select(day => new DateTime(year, month, day))
.Count(d => d.DayOfWeek != DayOfWeek.Saturday &&
d.DayOfWeek != DayOfWeek.Friday);
那麼你會只是迭代每一天,每個星期五和星期六從一個計數器初始化爲常規DaysInMonth我猜,刪除1。 – 2010-12-19 09:24:45
@Camilo Martin - 你的意思是'每天迭代'? DateTime.DaysInMonth檢索一個int而不是一個集合。 – Erez 2010-12-19 09:38:35
[.NET日期比較:計算自日期以來的工作天數?](http://stackoverflow.com/questions/165887/net-date-compare-count-the-amount-of-working- days-since-a-date) – Oded 2010-12-19 09:44:45