Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在给定月份和年份的情况下,如何获取特定周中的一组日期?_C#_Asp.net_Date_Datetime - Fatal编程技术网

C# 在给定月份和年份的情况下,如何获取特定周中的一组日期?

C# 在给定月份和年份的情况下,如何获取特定周中的一组日期?,c#,asp.net,date,datetime,C#,Asp.net,Date,Datetime,如何获得给定月份和年份的特定周的日期 例如: 我的参数: June - 2013 - The second week 我希望结果集如下所示: 9-6-2013 10-6-2013 11-6-2013 12-6-2013 13-6-2013 我希望它从太阳开始到周四。我还没有真正测试过这一点,但我认为这或多或少符合您的要求: int year = 2013; int month = 6; int lookupWeek = 2;

如何获得给定月份和年份的特定周的日期

例如:

我的参数:

June - 2013  - The second week 
我希望结果集如下所示:

9-6-2013
10-6-2013
11-6-2013
12-6-2013
13-6-2013

我希望它从太阳开始到周四。

我还没有真正测试过这一点,但我认为这或多或少符合您的要求:

        int year = 2013;
        int month = 6;
        int lookupWeek = 2;

        int daysInMonth = DateTime.DaysInMonth(year, month);
        int weekCounter = 1;

        List<DateTime> weekDays = new List<DateTime>();

        for (int day = 1; day <= daysInMonth; day++)
        {
            DateTime date = new DateTime(year,month,day);
            if(date.DayOfWeek == DayOfWeek.Sunday && day > 1) weekCounter++;

            if(weekCounter == lookupWeek) weekDays.Add(date);
        }
在我的图书馆里,我会:

从上个月底开始 在下一个星期天,你想循环多少次就循环多少次 从那里开始,产生天数,这样您就可以使用foreach循环: 因此:


这样的循环效率不高——你可以算出需要提前多少天——但更明显的是,这是正确的。你可以很容易地以一个错误结束,或者用一种更有效的方法回到上个月。当然,如果这很重要的话,你可以选择更加努力地提高效率。

这种方法给出了一个月中某一周的天数:

static IEnumerable<string> DaysInWeek(int year, int month, int week)
{
    var date = new DateTime(year, month, 1);

    var calendar = new GregorianCalendar();
    var firstWeek = calendar.GetWeekOfYear(date, CalendarWeekRule.FirstFullWeek, DayOfWeek.Sunday);
    var days = calendar.GetDaysInMonth(year, month);

    var daysInWeek = (from day in Enumerable.Range(0, calendar.GetDaysInMonth(year, month) - 1)
                        let dayDate = date.AddDays(day)
                        let week2 = calendar.GetWeekOfYear(dayDate, CalendarWeekRule.FirstFullWeek, DayOfWeek.Sunday) - firstWeek + 1
                        where week2 == week
                        select day + 1).ToList();

    foreach (var d in daysInWeek) yield return string.Format("{0:00}-{1:00}-{2:0000}", d, month, year);
}
将是:

09-06-2013
10-06-2013
11-06-2013
12-06-2013
13-06-2013

注意:我已经编辑了代码。有一只小虫子;因为在许多月份,第一周和最后一周都不是完整的几周,而这一周的某些日子属于另一个月。

如果您对客户端JavaScript路线感兴趣,那么可能值得一看,它允许以下内容:

// What date is next thursday?
Date.today().next().thursday();

// Add 3 days to Today
Date.today().add(3).days();

// Is today Friday?
Date.today().is().friday();

// Number fun
(3).days().ago();

// 6 months from now
var n = 6;
n.months().fromNow();

// Set to 8:30 AM on the 15th day of the month
Date.today().set({ day: 15, hour: 8, minute: 30 });

// Convert text into Date
Date.parse('today');
Date.parse('t + 5 d'); // today + 5 days
Date.parse('next thursday');
Date.parse('February 20th 1973');
Date.parse('Thu, 1 July 2004 22:30:00');
我发现自然语言语法“下周四”非常强大。

试试这个

protected void button_click(object sender, EventArgs e)
  {
        DateTime dt = new DateTime(2013, 6, 1);
        string[] dates = getDates(dt);

   }
        public string[] getDates(DateTime dt)
    {
        string[] result = new string[7]; ;
        for (int i = getDay(dt.DayOfWeek.ToString()); i < 7; i++)
        {
            if (i == 0)
            {
                break;
            }
            else
            {
                dt = dt.AddDays(1);
            }
        }
        for (int i = 0; i < 7; i++)
        {
            dt = dt.AddDays(1);
            result[i] = dt.ToShortDateString();
        }
        return result;
    }
    public int getDay(string day)
    {
        switch (day)
        {
            case "Monday":
                return 0;
            case "Tuesday":
                return 1;
            case "Wednesday":
                return 2;
            case "Thursday":
                return 3;
            case "Friday":
                return 4;
            case "Saturday":
                return 5;
            case "Sunday":
                return 6;
            default:
                return 0;
        }
    }## Heading ##

如果你热衷于使用linq,我几乎总是这样!,您可以这样做:

int year = 2013;
int month = 6;
int weekOfMonth = 2;

var dates = Enumerable.Range(1, DateTime.DaysInMonth(year, month))
                    .Select(day => new DateTime(year, month, day))
                    .GroupBy(g=> g.DayOfYear/7)
                    .ToList();

var week = dates.Min(g => g.Key) + weekOfMonth - 1;
var result = dates.Where(g=> g.Key.Equals(week)).Select(g => g.ToList());

你如何定义本周?总是从8号开始?总是从星期六开始?在ISO术语中,一年中的一周?我希望它从星期天开始到星期三,在我的示例中,这是第二个星期。那么,编写代码的问题到底是什么?弄清楚一周中哪一天是某一天?查找给定月份的第一天?递增天数直到找到满足条件的第一天?数到7?我写方法,但我认为这是针对我的情况,我想要一些一般的方式你说你想让Sun结婚,但你的例子显示Sun to Thu?更新了几次,使用了更清晰的变量名和一个星期编号的修正。我正要说StackOverflow先生在野田时间工作,他会推荐它的!:--1:试试这个,没有任何评论,这不是一个很好的答案格式,所以。
// What date is next thursday?
Date.today().next().thursday();

// Add 3 days to Today
Date.today().add(3).days();

// Is today Friday?
Date.today().is().friday();

// Number fun
(3).days().ago();

// 6 months from now
var n = 6;
n.months().fromNow();

// Set to 8:30 AM on the 15th day of the month
Date.today().set({ day: 15, hour: 8, minute: 30 });

// Convert text into Date
Date.parse('today');
Date.parse('t + 5 d'); // today + 5 days
Date.parse('next thursday');
Date.parse('February 20th 1973');
Date.parse('Thu, 1 July 2004 22:30:00');
protected void button_click(object sender, EventArgs e)
  {
        DateTime dt = new DateTime(2013, 6, 1);
        string[] dates = getDates(dt);

   }
        public string[] getDates(DateTime dt)
    {
        string[] result = new string[7]; ;
        for (int i = getDay(dt.DayOfWeek.ToString()); i < 7; i++)
        {
            if (i == 0)
            {
                break;
            }
            else
            {
                dt = dt.AddDays(1);
            }
        }
        for (int i = 0; i < 7; i++)
        {
            dt = dt.AddDays(1);
            result[i] = dt.ToShortDateString();
        }
        return result;
    }
    public int getDay(string day)
    {
        switch (day)
        {
            case "Monday":
                return 0;
            case "Tuesday":
                return 1;
            case "Wednesday":
                return 2;
            case "Thursday":
                return 3;
            case "Friday":
                return 4;
            case "Saturday":
                return 5;
            case "Sunday":
                return 6;
            default:
                return 0;
        }
    }## Heading ##
int year = 2013;
int month = 6;
int weekOfMonth = 2;

var dates = Enumerable.Range(1, DateTime.DaysInMonth(year, month))
                    .Select(day => new DateTime(year, month, day))
                    .GroupBy(g=> g.DayOfYear/7)
                    .ToList();

var week = dates.Min(g => g.Key) + weekOfMonth - 1;
var result = dates.Where(g=> g.Key.Equals(week)).Select(g => g.ToList());