因为项目的需求需要拿到当天为今年的第几周 上网找了一些但都达不到我想要的郊果 所以自己随手写了一个功能。
#region 获得周数
/// <summary>
/// 获得今天是今年或第二年的第几周
/// </summary>
/// <param name="dt">当前时间</param>
/// <returns></returns>
public int GetWeekSNum(DateTime dt)
{
int week = 0; //当前周数 整形
string weeks = ""; //当前周数字符串 年加周数
int oldAdd = 0; //要追加的天数 意思是:如果今年的一月一日是星期二 他的开始周是去年的十二月三十日 就要在今年的总天数上加上两天
int newAdd = 0; //要减去的天数 意思是:如果明年的一月一日是星期三 他的开始周是去年的十二月三十日 就要在今年的总天数上减去三天
int totalDay = 0; //今年所有周的总天数
int Day = dt.DayOfYear; //今天是今年的第几天
System.DayOfWeek weekOld = Convert.ToDateTime(dt.ToString("yyyy") + "-1-1").DayOfWeek; //今年的1月1日是星期几
System.DayOfWeek weekNew = Convert.ToDateTime(dt.ToString("yyyy") + "-1-1").AddYears(1).DayOfWeek;//明年的1月1日是星期几
oldAdd = getDayInt(weekOld); //根据星期几 获得要多加的天数
newAdd = getDayInt(weekNew); //根据星期几 获得要减去的天数
if (DateTime.IsLeapYear(dt.Year))//如果今年是闰年一年就有366天 否则就是365天
{
totalDay = 366;
}
else
{
totalDay = 365;
}
int total = totalDay + oldAdd - newAdd; //获得一年当中所有周的总天数 周总天数= 今年的总天数 + 追加的天数 - 截掉的天数
int weekDay = Day + oldAdd; //获得今天是总周数的第几天
if (weekDay <= total)//今天是周总天数中的第几天 <= 周总天数
{
switch (weekDay)
{
case 364: //刚好是364天
week = 364 / 7;
break;
case 371: //刚好是371天
week = 371 / 7;
break;
default:
if (weekDay % 7 == 0) //如果总周天数刚好是7的倍数不用加1周 否则要加上1周
{
week = (weekDay / 7);
}
else
{
week = (weekDay / 7) + 1;
}
break;
}
weeks = dt.Year.ToString();
}
else //超出周的总天数就推往下一年
{
week = 1;
weeks = dt.AddYears(1).Year.ToString();
}
//这里是为了转成 201301的这种格式的 可以自己改
if (week < 10)
{
weeks += "0" + week;
}
else
{
weeks += week.ToString();
}
return Convert.ToInt32(weeks);
}
/// <summary>
/// 获得要多追加的天数或减去的天数
/// </summary>
/// <param name="dw"></param>
/// <returns></returns>
private int getDayInt(System.DayOfWeek dw)
{
int day = 0;
switch (dw)
{
case DayOfWeek.Sunday:
day = 0;
break;
case DayOfWeek.Monday:
day = 1;
break;
case DayOfWeek.Tuesday:
day = 2;
break;
case DayOfWeek.Wednesday:
day = 3;
break;
case DayOfWeek.Thursday:
day = 4;
break;
case DayOfWeek.Friday:
day = 5;
break;
case DayOfWeek.Saturday:
day = 6;
break;
}
return day;
}
#endregion