如何在c#中获取一个月中的天数 [英] How to get the day number in a month in c#

查看:141
本文介绍了如何在c#中获取一个月中的天数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

例如如何获取特定年份特定工作日的所有日期:

How to get all dates for particular weekdays in certain year for example:

Monday : 07.01.2015,14.01.2015,...,21.02.2015, ,28.12.2015
Tuesday : 08.01.2015, 15.01.2015,..., 22.02.2015, 29.12.2015

等等……

谢谢

推荐答案

public static IEnumerable<int> DaysInMonth(int year, int month, DayOfWeek dow)
{ 
    DateTime monthStart = new DateTime(year, month, 1);
    return Enumerable.Range(0, DateTime.DaysInMonth(year, month))
        .Select(day => monthStart.AddDays(day))
        .Where(date => date.DayOfWeek == dow)
        .Select(date => date.Day);
}

你的例子:

var wednesdaysInSeptember2015 = DaysInMonth(2015, 9, DayOfWeek.Wednesday);
Console.Write(String.Join(",", wednesdaysInSeptember2015)); // 2,9,16,23,30

<小时>

就其价值而言,这是一个性能优化的版本:


For what it's worth, here is a performance optimized version:

public static IEnumerable<int> DaysInMonthMicroOptimized(int year, int month, DayOfWeek dayOfWeek)
{
    DateTime monthStart = new DateTime(year, month, 1);
    int distanceToDayOfWeek = (dayOfWeek < monthStart.DayOfWeek ? 7 : 0) + dayOfWeek - monthStart.DayOfWeek;
    DateTime dayOfWeekInMonth = monthStart.AddDays(distanceToDayOfWeek);
    yield return dayOfWeekInMonth.Day;
    while((dayOfWeekInMonth = dayOfWeekInMonth.AddDays(7)).Month == month)
        yield return dayOfWeekInMonth.Day;
}

这篇关于如何在c#中获取一个月中的天数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆