计算周数的方式 - 现在是今年的第几周?

前言

很多地方需要用到“周”这个数字,日常办公可以使用excel的函数获取,软件开发可以使用自带的函数获取。其实我们从未关心过,我们获取到的周是如何计算的,计算的值,真的是正确的吗?或者说真的是你想要的吗?

前些日子,因为“周”这个数字计算失误,与客户其他系统不一致,产生了疑问。那么接下来,我就将近期收集到的资料,描述一下。

计算逻辑

周的计算,目前收集到的资料,有3种方式:

1、每年的1月1日(也就是第1天)所在的周,为第1周。
2、每年的第1个完整周(也就是周一到周天必须在1年内)所在的周,为第1周。
3、ISO8036标准,本年度第1个星期四所在的星期,为第1周。

经过测试,发现华为荣耀手机日历,是按照 第1种方法算的。而小米手机则是按照第2种计算方法。第3种方法,暂时没找到用处。

计算方式

方式一、适用于程序开发,C#语言调用微软的System.Globalization的方法

private static string GetWeekOfYear(DateTime dt)
{
    System.Globalization.GregorianCalendar gc = new System.Globalization.GregorianCalendar();
    int weekOfYear = gc.GetWeekOfYear(dt, System.Globalization.CalendarWeekRule.FirstFullWeek, DayOfWeek.Sunday);
    return weekOfYear.ToString().PadLeft(2, '0'); ;
}

重点内容是 “GetWeekOfYear”这个函数。

第1个参数是日期

第2个参数:表示用哪种方式计算。目前有3种:FirstFourDayWeek,FirstDay,FirstFullWeek(对应上述我说的几种)

第3个参数表示以哪一天作为周的第一天

下面附录一份计算年的算法(无非就是针对1月份的日期,判断年份是否减1的操作):

{
    int y = dt.Year;
    int m = dt.Month;
    int nWeek = int.Parse(GetWeekOfYear(dt));
    if (m == 1 && nWeek > 40)
    {
        y = y - 1;
    }
    return y;
}

方式二、Excel计算(办公常用)

函数1:WEEKNUM (按照上述第1种计算方法计算周数)

参考:WEEKNUM函数 计算学期周数-WPS学堂-原WPS学院

函数2:第2中计算方式,未找到-_-|| 。如果后续知道了,会继续更新。

函数3:ISOWEEKNUM (按照上述第3种方式计算周数,WPS中不存在,只能按照周一为每周第1天计算)

参考:ISOWEEKNUM 函数

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值