根据周次反推日期区间,求最佳算法

神色自若 2013-03-29 02:16:30
例如:如下函数可以精确反回一个日期对应的周次,还可以指定每周的第一天是周几
DateTime time = new DateTime(2013, 1, 7);
int i = new System.Globalization.GregorianCalendar().GetWeekOfYear(time, System.Globalization.CalendarWeekRule.FirstDay, DayOfWeek.Monday);//DayOfWeek.Monday指定每周第一天是周一

求根据周次,返推周一到周日的具体时间(最好可以指定每周第一天是周几)
例如:2013年,第2周,推出的日期为2013年1月7日到2013年1月13日(求最精简的算法)
...全文
324 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
md5e 2013-03-29
  • 打赏
  • 举报
回复
其中 public DateTime GetDateTimeForWeekFirstDay(int Year, int num) 就是获取n年第n周的第一天,用第一天 + 6 就是最后一天的日期
md5e 2013-03-29
  • 打赏
  • 举报
回复

        /// <summary>
        /// 返回日期在年份中的第几周
        /// </summary>
        /// <param name="dt"></param>
        /// <returns></returns>
        public  int GetWeekNumOfYear(DateTime dt)
        {
            int days = dt.DayOfYear + (7 - ((int)dt.DayOfWeek + 1));
            return days / 7 + (days % 7 == 0 ? 0 : 1);

        }

        public DateTime GetDateTimeForWeekFirstDay(int Year, int num)
        {
            DateTime day = new DateTime(Year, 1, 1);
            return day.AddDays(7 * (num - 1) - ((int)day.DayOfWeek % 7 == 0 ? 0 : (int)day.DayOfWeek));
        }
        /// <summary>
        /// 获取两个日期之间相差的周数
        /// </summary>
        /// <param name="dt1"></param>
        /// <param name="dt2"></param>
        /// <returns></returns>
        public static int GetWeekInBTime(DateTime dt1, DateTime dt2)
        {
            TimeSpan ts = dt1 - dt2;
            DateTime dt = ts.TotalDays > 0 ? dt1 : dt2;
            int days = (int)System.Math.Abs(ts.TotalDays) + (7 - ((int)dt.DayOfWeek + 1));

            return days / 7 + (days % 7 == 0 ? 0 : 1);
        }

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧