Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.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中查找给定日期范围的周数#_C#_Asp.net_Datetime - Fatal编程技术网

C# 如何在C中查找给定日期范围的周数#

C# 如何在C中查找给定日期范围的周数#,c#,asp.net,datetime,C#,Asp.net,Datetime,我需要在C#中找到给定日期的周数 Ex:2014年1月1日至2014年1月14日 周数同样为第1周、第2周和第3周 谢谢。这应该可以: public List<int> Weeks(DateTime start, DateTime end) { List<int> weeks=new List<int>(); var Week=(int)Math.Floor((double)start.DayOfYear/7.0); //starting we

我需要在C#中找到给定日期的周数

Ex:2014年1月1日至2014年1月14日 周数同样为第1周、第2周和第3周

谢谢。

这应该可以:

public List<int> Weeks(DateTime start, DateTime end)
{
    List<int> weeks=new List<int>();
    var Week=(int)Math.Floor((double)start.DayOfYear/7.0); //starting week number
    for (DateTime t = start; t < end; t = t.AddDays(7))
    {
        weeks.Add(Week);
        Week++;
    }
    return weeks;
}
公共列表周(日期时间开始,日期时间结束)
{
列表周=新列表();
var Week=(int)Math.Floor((double)start.DayOfYear/7.0);//起始周数
对于(日期时间t=start;t

所有这些都是获取开始日期的周数,然后一次循环一周,直到到达结束日期,增加周数并将其添加到周数列表中。

好的,让我们从一个简单、未优化的示例开始。我们将简单地检查这些日期之间的每个日期,并检查它是一年中的哪一周

我们可以通过一个简单的循环来实现:

var end = new DateTime(2014, 1, 14);
for (var date = new DateTime(2014, 1, 1); date <= end; date = date.AddDays(1))
{
}
weekNumber
Hashset现在包含一年中的周数


这是优化的吗?否。它检查的日期远多于需要检查的日期,但实现非常简单和快速。优化可以作为一项单独的任务来完成。

这不是最聪明的方法,但很有效

  var d1 = new DateTime(2014, 1, 1);
  var d2 = new DateTime(2014, 1, 14);
  var currentCulture = CultureInfo.CurrentCulture;
  var weeks = new List<int>();

  for (var dt = d1; dt < d2; dt =dt.AddDays(1))
   {
      var weekNo = currentCulture.Calendar.GetWeekOfYear(
                            dt,
                            currentCulture.DateTimeFormat.CalendarWeekRule,
                            currentCulture.DateTimeFormat.FirstDayOfWeek);
       if(!weeks.Contains(weekNo))
         weeks.Add(weekNo);
  }
var d1=新日期时间(2014,1,1);
var d2=新日期时间(2014年1月14日);
var currentCulture=CultureInfo.currentCulture;
var weeks=新列表();
对于(var dt=d1;dt
简单。以下是确定单个日期的一年中的星期的代码。这应该会让你开始:

int WeekOfYear(DateTime date, DayOfWeek dayOfWeekStart) {
    //Find the first day of the year that's the start of week day.  If it's not 1/1,
    //then we have a first partial week.
    bool firstPartialWeek = false;
    DateTime firstFullWeekStart = new DateTime(date.Year, 1, 1);
    while(firstFullWeekStart.DayOfWeekDay != dayOfWeekStart) {
        firstFullWeekStart = firstOfWeek.AddDays(1);
        firstPartialWeek = true;
    }
    //Return the week by integer dividing the date difference by seven,
    //and adding in the potential first partial week
    return (firstPartialWeek ? 1 : 0) + ((date - firstFullWeekStart).TotalDays / 7);

}

你尝试了什么?你能提供你的代码的例子吗?看看,会给你一个起点吗?我们可以看看你写的不符合你需要的代码吗?@Aaronmalen:不总是有“代码示例”!!给出的链接是正确的答案,我刚刚学到了一些东西。我喜欢有一个链接到一个问题,海报只是问了几乎相同的问题,这张海报,并得到了标记。我们不应该这么快就击落一根柱子。我同意,没有尝试,但我们仍然可以帮助。哇,我不知道CalendarWeekRule。此外,您还可以只计算端点,然后在最小值和最大值之间进行枚举。
int WeekOfYear(DateTime date, DayOfWeek dayOfWeekStart) {
    //Find the first day of the year that's the start of week day.  If it's not 1/1,
    //then we have a first partial week.
    bool firstPartialWeek = false;
    DateTime firstFullWeekStart = new DateTime(date.Year, 1, 1);
    while(firstFullWeekStart.DayOfWeekDay != dayOfWeekStart) {
        firstFullWeekStart = firstOfWeek.AddDays(1);
        firstPartialWeek = true;
    }
    //Return the week by integer dividing the date difference by seven,
    //and adding in the potential first partial week
    return (firstPartialWeek ? 1 : 0) + ((date - firstFullWeekStart).TotalDays / 7);

}