计算某日期为当年第几周算法

本文提供两种方法来计算一年中当前日期所在的一周,一种是通过SQL语句设置一周的起始日,另一种是使用C#代码实现,适用于不同的一周起始日需求。

1,数据库计算

一周是从周日到周六

select DateName(week,getdate())

一周是从周一到周日

set datefirst 1 select DateName(week,getdate())

 

指示一周的第一天的一个整数。可以是下列值之一。

一周的第一天是

1

星期一

2

星期二

3

星期三

4

星期四

5

星期五

6

星期六

7(默认值,美国英语)

星期日

2,c#计算

一周是从周日到周六

 

/// <summary>
    /// 当前日期为当前年份周数
    /// </summary>
    /// <param name="Date">当前时间</param>
    /// <returns>周数</returns>
    private int GetWeekOrderOfDate(DateTime Date)
    {
        //当天所在的年份
        int year = Date.Year;
        //当年的第一天
        DateTime firstDay = new DateTime(year, 1, 1);
        //当年的第一天是星期几
        int firstOfWeek = Convert.ToInt32(firstDay.DayOfWeek);
        //if (firstDay.DayOfWeek == DayOfWeek.Sunday) firstOfWeek = 7;
        //当年第一周的天数
        int firstWeekDayNum = 7 - firstOfWeek;

        //传入日期在当年的天数与第一周天数的差
        int otherDays = Date.DayOfYear - firstWeekDayNum;
        //传入日期不在第一周内
        if (otherDays > 0)
        {
            int weekNumOfOtherDays;
            if (otherDays % 7 == 0)
            {
                weekNumOfOtherDays = otherDays / 7;
            }
            else
            {
                weekNumOfOtherDays = otherDays / 7 + 1;
            }

            return weekNumOfOtherDays + 1;
        }
        //传入日期在第一周内
        else
        {
            return 1;
        }
    }

 

一周是从周一到周日

/// <summary>
    /// 当前日期为当前年份周数
    /// </summary>
    /// <param name="Date">当前时间</param>
    /// <returns>周数</returns>
    private int GetWeekOrderOfDate(DateTime Date)
    {
        //当天所在的年份
        int year = Date.Year;
        //当年的第一天
        DateTime firstDay = new DateTime(year, 1, 1);
        //当年的第一天是星期几
        int firstOfWeek = Convert.ToInt32(firstDay.DayOfWeek);
        if (firstDay.DayOfWeek == DayOfWeek.Sunday) firstOfWeek = 7;
        //当年第一周的天数
        int firstWeekDayNum = 8 - firstOfWeek;

        //传入日期在当年的天数与第一周天数的差
        int otherDays = Date.DayOfYear - firstWeekDayNum;
        //传入日期不在第一周内
        if (otherDays > 0)
        {
            int weekNumOfOtherDays;
            if (otherDays % 7 == 0)
            {
                weekNumOfOtherDays = otherDays / 7;
            }
            else
            {
                weekNumOfOtherDays = otherDays / 7 + 1;
            }

            return weekNumOfOtherDays + 1;
        }
        //传入日期在第一周内
        else
        {
            return 1;
        }
    }

 

 


方法2:

public int WeekOfYear(DateTime dt, CultureInfo ci)
    {
        return ci.Calendar.GetWeekOfYear(dt, ci.DateTimeFormat.CalendarWeekRule, ci.DateTimeFormat.FirstDayOfWeek);
    }

调用方法  周日到周六算一周
WeekOfYear(Convert.ToDateTime("2012-1-2 00:00:00"),new CultureInfo("zh-CN"))

http://msdn.microsoft.com/zh-cn/library/system.globalization.cultureinfo(VS.80).aspx 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值