当前位置: 移动技术网 > IT编程>开发语言>c# > C# 获取当前年份的周期及周期所在日期范围(推荐)

C# 获取当前年份的周期及周期所在日期范围(推荐)

2019年07月18日  | 移动技术网IT编程  | 我要评论

最近有一个项目要用到年份周期,用于数据统计图表展示使用,当中用到年份周期,以及年份周期所在的日期范围。当初设想通过已知数据来换算年份周期,经过搜索资料发现通过数据库sql语句来做,反而更加复杂。现在改变思路通过c#后台代码来算出两段日期范围中年份周期,在依据年份周期所对应的日期范围进行数据库查询进行统计。需要解决以下两个点问题,

第一点:依据日期查找所在年份的第几周;

第二点:依据年份所在的周期计算出周期所在的日期范围。

using system;
using system.collections.generic;
using system.globalization;
using system.linq;
using system.text;
using system.threading.tasks;
namespace consoleapplication6
{
  class program
  {
    static void main(string[] args)
    {
      gregoriancalendar gc = new gregoriancalendar();
      int weekofyear = gc.getweekofyear(datetime.now, calendarweekrule.firstday, dayofweek.monday);
      console.writeline("当前第{0}周", weekofyear);
      datetime startdate, lastdate;
      for (int i = 1; i <= 53; i++)
      {
        getdaysofweeks(datetime.now.year, i, out startdate, out lastdate);
        console.writeline("第{0}周", i);
        console.writeline(startdate);
        console.writeline(lastdate);
      }
      console.readline();
    }
    public static bool getdaysofweeks(int year, int index, out datetime first, out datetime last)
    {
      first = datetime.minvalue;
      last = datetime.minvalue;
      if (year < 1700 || year > 9999)
      {
        //"年份超限"
        return false;
      }
      if (index < 1 || index > 53)
      {
        //"周数错误"
        return false;
      }
      datetime startday = new datetime(year, 1, 1); //该年第一天
      datetime endday = new datetime(year + 1, 1, 1).addmilliseconds(-1);
      int dayofweek = 0;
      if (convert.toint32(startday.dayofweek.tostring("d")) > 0)
        dayofweek = convert.toint32(startday.dayofweek.tostring("d")); //该年第一天为星期几
      if (dayofweek == 0) { dayofweek = 7; }
      if (index == 1)
      {
        first = startday.adddays(7 - dayofweek - 6);
        if (dayofweek == 6)
        {
          last = first;
        }
        else
        {
          last = startday.adddays((7 - dayofweek));
        }
      }
      else
      {
        first = startday.adddays((8 - dayofweek) + (index - 2) * 7); //index周的起始日期
        last = first.adddays(6);
        //if (last > endday)
        //{
        //  last = endday;
        //}
      }
      if (first > endday) //startdayofweeks不在该年范围内
      {
        //"输入周数大于本年最大周数";
        return false;
      }
      return true;
    }
  }
}

  执行结果 

总结

以上所述是小编给大家介绍的c# 获取当前年份的周期及周期所在日期范围(推荐),希望对大家有所帮助

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网