c# 自然周

   //根据年份计算该年有多少周

public static int GetWeekCountOfYear(int strYear)

{

DateTime firstDay = DateTime.Parse(strYear.ToString() + "-01-01");

int weekOfFirstDay = Convert.ToInt32(firstDay.DayOfWeek);//得到该年的第一天是星期几

int countWeek;//该年有多少周

//

//一年最少有53周,最多有54周

//如果是平年(365),52×7=364,多余1天,故共有53周

//如果是闰年(366),52×7=364,多余2天:

////如果多余的两天分别是年初和年末,则有54周,其他情况均为53周

//

if (DateTime.IsLeapYear(strYear) && weekOfFirstDay == 7)

{//如果该年是闰年且第一天为星期日

countWeek = 54;

}

else

{

countWeek = 53;

}

return countWeek;

}



//计算某天在某年的第几周内,且返回这周的起始日期

public int GetWeekOfCurrDate(DateTime dt)

{

int week = 0;//返回的周次

//获取该年有多少周

int countWeek = 0;

countWeek = GetWeekCountOfYear(dt.Year);



//获取该年有多少天

int countDay = 0;

if (!DateTime.IsLeapYear(dt.Year))

{

//平年

countDay = 365;

}

else

{

//闰年

countDay = 366;

}



//获取该年第一天是星期几

int firstDayOfWeek = (int)DateTime.Parse(dt.Year.ToString() + "-01-01").DayOfWeek;



//获取该年最后一天是星期几

int lastDayOfWeek = (int)DateTime.Parse(dt.Year.ToString() + "-12-31").DayOfWeek;



//获取第一周有多少天

int countDayOfFirstWeek = 7 - firstDayOfWeek + 1;



//获取最后一周有多少天

int countDayOfLastWeek = lastDayOfWeek;



//除去第一周和最后一周,该年还剩多少天

int countDayRemain = countDay - countDayOfFirstWeek - countDayOfLastWeek;



//除去第一周和最后一周,该年还剩多少周

int countWeekRemain = countDayRemain % 7;



if (dt.DayOfYear <= countDayOfFirstWeek)

{

//所求的日期在第一周内

week = 1;

}

else

{

if (dt.DayOfYear >= countDay - countDayOfLastWeek)

{

//所求的日期在最后一周内

week = countWeek - 2;

}

else

{

//判断除去第一周,所求日期是否能被7整除

if ((dt.DayOfYear - countDayOfFirstWeek) / 7 == 0)

{

week = (dt.DayOfYear - countDayOfFirstWeek) / 7 + 1;

}

else

{

week = (dt.DayOfYear - countDayOfFirstWeek) / 7 + 2;

}

}

}

return week;

}



转载于:https://www.cnblogs.com/tough/archive/2011/07/27/2118794.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值