如何获得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);
相关问题
- 1. 在没有周末的情况下在daterangepicker中计算天
- 2. 如何在没有周期的情况下初始化std :: vector?
- 3. 如何在没有索引号的情况下获取数据
- 4. 如何在没有页面的情况下获取网址
- 5. 如何在没有FacesContext的情况下获取资源路径?
- 6. 如何在没有网站的情况下获取包名?
- 7. 如何在没有输出的情况下获取file.R
- 8. 如何在没有域名的情况下获取用户名
- 9. 如何在没有Nuget的情况下获取Entity Framework 4.2?
- 10. 在没有统计的情况下获取没有行的表
- 11. 没有周末
- 12. 在没有任何东西的情况下获取RSS
- 13. 如何在javascript中获取周末?
- 14. java日历 - 获取最后5天的一周(没有周末)
- 15. 在没有UIEvent的情况下获取所有触摸
- 16. 如何在没有API的情况下在Instagram中获取所有hashtag图片?
- 17. 如何在没有任何请求,会话等情况下获取上下文?
- 18. 如何在url的末尾没有.json的情况下呈现json
- 19. 如何在没有获得建议的情况下获取登录选项?
- 20. 如何在没有获取整个文档的情况下获得字段值?
- 21. 如何在没有AJAX的情况下在本地抓取JSON
- 22. 在没有DisplayObject的情况下在ActionScript-3中获取舞台?
- 23. 在没有$ _GET的情况下在php中获取jQuery变量
- 24. 如何获取周末的日期?
- 25. 在没有session.lookup的情况下获取GMaven脚本中的MavenProjectHelper
- 26. 在没有别名的情况下获取Joomla中的链接?
- 27. 在没有unrar的情况下获取rar文件的名字
- 28. 在没有WMI的情况下获取完整的CPU名称
- 29. 在没有SPI的情况下获取RFID卡的UID值
- 30. 在没有用户交互的情况下获取新的access_code?
那么你会只是迭代每一天,每个星期五和星期六从一个计数器初始化为常规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