C# 如何在C中查找给定日期范围的周数#
我需要在C#中找到给定日期的周数 Ex:2014年1月1日至2014年1月14日 周数同样为第1周、第2周和第3周 谢谢。这应该可以: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
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);
}