ISOWEEK的算法

算ISOWEEK的时候,通常是以(该日的所属周数+1 )- (该年的1-4所属周数),但也有特殊的情况,case1 :可能当年的一月1号到3号是属于前年的,case2 : 可能前年12月29到31号是属于下一年的.

SQL的算法

CREATE FUNCTION ISOweek (@DATE datetime)
RETURNS int
AS
BEGIN
DECLARE @ISOweek int
SET @ISOweek= DATEPART(wk,@DATE)+1
-DATEPART(wk,CAST(DATEPART(yy,@DATE) as CHAR(4))+'0104')
--Special cases: Jan 1-3 may belong to the previous year
IF (@ISOweek=0)
SET @ISOweek=dbo.ISOweek(CAST(DATEPART(yy,@DATE)-1
AS CHAR(4))+'12'+ CAST(24+DATEPART(DAY,@DATE) AS CHAR(2)))+1
--Special case: Dec 29-31 may belong to the next year
IF ((DATEPART(mm,@DATE)=12) AND
((DATEPART(dd,@DATE)-DATEPART(dw,@DATE))>= 28))
SET @ISOweek=1
RETURN(@ISOweek)
END

VB的算法

Public Function CaclISOWeek(ByVal dt As Date ) As Integer
Dim tmpdate As Date
Dim isowkid As Integer
isowkid = DatePart("ww",dt)+1-DatePart("ww",DateSerial(Year(dt),01,04))
If isowkid = 0 Then
tmpdate = DateSerial(Year(dt)-1,12,24+Day(dt))
isowkid = DatePart("ww",tmpdate)+1-DatePart("ww",DateSerial(Year(dt)-1,01,04))+1
End If
If ((DatePart("m",dt)=12) And ((DatePart("d",dt)- DatePart("w",dt))>= 28)) Then
isowkid = 1
End If
CaclISOWeek = isowkid
End Function

下面再讲一下ISOWEEK的年开始日

ISOweek 一年的开始日的算法应该是先确定当年的一月一号是否星期4或星期五,假如是星期4或星期5,那年的开始日应该是分别加4或加3,找到下个星期的星期一;假如是其他的星期天数,那就用[x-2](x为用weekday 函数算出的数字,假如星期天x为1,假如星期六为7)算出星期一的那天天数.

[@more@]

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/443058/viewspace-912196/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/443058/viewspace-912196/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值