using System;namespace ConsoleApplication1 { internal class Program { private static void Main() { DateTime day = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1); DateTime lastDay = new DateTime(DateTime.Now.Year, DateTime.Now.Month + 1, 1).AddDays(-1); int i = 0; do { Console.WriteLine("Week {0}:", ++i); while (day.DayOfWeek != DayOfWeek.Sunday && day <= lastDay) { Console.WriteLine("\t{0} is {1}", day.ToShortDateString(), day.DayOfWeek); day = day.AddDays(1); } if (day <= lastDay) { Console.WriteLine("\t{0} is {1}", day.ToShortDateString(), day.DayOfWeek); day = day.AddDays(1); } } while (day <= lastDay); Console.ReadLine(); } } }
没有什么常理,要看你的规则int year = Convert.ToInt32(textBox1.Text); int month = Convert.ToInt32(textBox2.Text); DateTime weekStart = new DateTime(year, month, 1); DateTime monEnd = weekStart.AddMonths(1).AddDays(-1); int i = 1; int dayOfWeek = Convert.ToInt32(weekStart.DayOfWeek.ToString("d")); DateTime weekEnd = dayOfWeek == 0 ? weekStart : weekStart.AddDays(7 - dayOfWeek); //该月第一周结束日期 richTextBox2.Text += "第" + i + "周起始日期: " + weekStart.ToShortDateString() + " 结束日期: " + weekEnd.ToShortDateString() + "\n"; while (weekEnd.AddDays(1) < monEnd) { i++; weekStart = weekEnd.AddDays(1); weekEnd = weekEnd.AddDays(7) > monEnd ? monEnd : weekEnd.AddDays(7); richTextBox2.Text += "第" + i + "周起始日期: " + weekStart.ToShortDateString() + " 结束日期: " + weekEnd.ToShortDateString() + "\n"; } richTextBox2.Text += year + "年" + month + "月共有" + i + "周\n";其实就是AddDays和AddMonths的组合,简单的写了下,懒得做优化了,或者参考C#根据当前时间确定日期范围(本周、本月、本季度、本年度)
private void ShowWeekSinMonth(int y, int m) { int days = DateTime.DaysInMonth(y, m); int weeks =1; DateTime FirstDayOfMonth = DateTime.Parse(y + "-" + m + "-1"); DateTime FirstDayOfWeek = FirstDayOfMonth; while (FirstDayOfWeek.Month == m) { Response.Write("第" + weeks + "周:"); Response.Write(FirstDayOfWeek.ToString("yyyy年MM月dd日")); Response.Write("--"); DateTime LastDayOfWeek; if (FirstDayOfWeek.Day + 7 > days) { LastDayOfWeek = FirstDayOfWeek.AddDays(days - FirstDayOfWeek.Day); } else { LastDayOfWeek = FirstDayOfWeek.AddDays(7 - getWeekDay(FirstDayOfWeek) -1); } Response.Write(LastDayOfWeek.ToString("yyyy年MM月dd日")); Response.Write("<BR>"); weeks += 1; FirstDayOfWeek = LastDayOfWeek.AddDays(1); } } private int getWeekDay(DateTime d) { return (d.Day+2*d.Month+3*(d.Month+1)/5+d.Year+d.Year/4-d.Year/100+d.Year/400 + 1) % 7; }
--本月的第一个星期一
select DATEADD(wk,
DATEDIFF(wk,0,dateadd(dd,6-datepart(day,getdate()),getdate())), 0)
{
internal class Program
{
private static void Main()
{
DateTime day = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1);
DateTime lastDay = new DateTime(DateTime.Now.Year, DateTime.Now.Month + 1, 1).AddDays(-1);
int i = 0;
do
{
Console.WriteLine("Week {0}:", ++i);
while (day.DayOfWeek != DayOfWeek.Sunday && day <= lastDay)
{
Console.WriteLine("\t{0} is {1}", day.ToShortDateString(), day.DayOfWeek);
day = day.AddDays(1);
}
if (day <= lastDay)
{
Console.WriteLine("\t{0} is {1}", day.ToShortDateString(), day.DayOfWeek);
day = day.AddDays(1);
}
} while (day <= lastDay); Console.ReadLine();
}
}
}
没有什么常理,要看你的规则int year = Convert.ToInt32(textBox1.Text);
int month = Convert.ToInt32(textBox2.Text);
DateTime weekStart = new DateTime(year, month, 1);
DateTime monEnd = weekStart.AddMonths(1).AddDays(-1);
int i = 1;
int dayOfWeek = Convert.ToInt32(weekStart.DayOfWeek.ToString("d"));
DateTime weekEnd = dayOfWeek == 0 ? weekStart : weekStart.AddDays(7 - dayOfWeek); //该月第一周结束日期
richTextBox2.Text += "第" + i + "周起始日期: " + weekStart.ToShortDateString() + " 结束日期: " + weekEnd.ToShortDateString() + "\n";
while (weekEnd.AddDays(1) < monEnd)
{
i++;
weekStart = weekEnd.AddDays(1);
weekEnd = weekEnd.AddDays(7) > monEnd ? monEnd : weekEnd.AddDays(7);
richTextBox2.Text += "第" + i + "周起始日期: " + weekStart.ToShortDateString() + " 结束日期: " + weekEnd.ToShortDateString() + "\n";
}
richTextBox2.Text += year + "年" + month + "月共有" + i + "周\n";其实就是AddDays和AddMonths的组合,简单的写了下,懒得做优化了,或者参考C#根据当前时间确定日期范围(本周、本月、本季度、本年度)
private void ShowWeekSinMonth(int y, int m)
{
int days = DateTime.DaysInMonth(y, m);
int weeks =1;
DateTime FirstDayOfMonth = DateTime.Parse(y + "-" + m + "-1"); DateTime FirstDayOfWeek = FirstDayOfMonth;
while (FirstDayOfWeek.Month == m)
{
Response.Write("第" + weeks + "周:");
Response.Write(FirstDayOfWeek.ToString("yyyy年MM月dd日"));
Response.Write("--");
DateTime LastDayOfWeek;
if (FirstDayOfWeek.Day + 7 > days)
{
LastDayOfWeek = FirstDayOfWeek.AddDays(days - FirstDayOfWeek.Day);
}
else
{
LastDayOfWeek = FirstDayOfWeek.AddDays(7 - getWeekDay(FirstDayOfWeek) -1);
}
Response.Write(LastDayOfWeek.ToString("yyyy年MM月dd日"));
Response.Write("<BR>");
weeks += 1;
FirstDayOfWeek = LastDayOfWeek.AddDays(1);
}
}
private int getWeekDay(DateTime d)
{
return (d.Day+2*d.Month+3*(d.Month+1)/5+d.Year+d.Year/4-d.Year/100+d.Year/400 + 1) % 7;
}
第2周:2009年05月03日--2009年05月09日
第3周:2009年05月10日--2009年05月16日
第4周:2009年05月17日--2009年05月23日
第5周:2009年05月24日--2009年05月30日
第6周:2009年05月31日--2009年05月31日[/code]
if (year % 4 == 0 && year % 100 != 0)
{
_mDay[1] = 29;
}
else if (year % 400 == 0)
{
_mDay[1] = 29;
} //total week of the month
int sum;
DateTime[,] weekArray;
DateTime dt = new DateTime(year, month, 1);
if (dt.DayOfWeek != DayOfWeek.Sunday)
{
int _week = (int)dt.DayOfWeek; //how many day this week last
int _day = 6 - _week; //how many day this month last
int lastDay = _mDay[month - 1] - (_day + 1); if (lastDay / 7 == 0)
{
sum = (lastDay / 7) + 1;
} else
{
sum = (lastDay / 7) + 2;
}
weekArray = new DateTime[sum, 2];
weekArray[0, 0] = dt;
weekArray[0, 1] = dt.AddDays(_day); for (int i = 1; i < sum; i++)
{
weekArray[i, 0] = weekArray[i - 1, 1].AddDays(1);
weekArray[i, 1] = weekArray[i - 1, 1].AddDays(7);
} }
else
{
int lastDay = _mDay[month - 1]; if (lastDay / 7 == 0)
{
sum = (lastDay / 7);
}
else
{
sum = (lastDay / 7) + 1;
} weekArray = new DateTime[sum, 2];
weekArray[0, 0] = dt;
weekArray[0, 1] = dt.AddDays(6); for (int i = 1; i < sum; i++)
{
weekArray[i, 0] = weekArray[i - 1, 1].AddDays(1);
weekArray[i, 1] = weekArray[i - 1, 1].AddDays(7);
}
}
BeginDate = weekArray[week - 1, 0];
EndDate = weekArray[week - 1, 1];
select datepart(week,getdate())-datepart(week,getdate()-day(getdate()))+1