zoukankan      html  css  js  c++  java
  • C# 获取当前日期当年的周数

    这几天跨年,项目上遇到了一个周数计算的问题。

    2016年的元旦是周五开始的,之前系统计算的是属于15年的第53个周,但是年份已经到了16年了。

    公司要求从1月1号周五开始算作16年的第一个周,今天1月4号也就是周一,开始算作16年的第二个周。

    第一件事先百度,看看有没有现成的轮子,但是百度出来的都有问题。然后自己找了个案例修改了下。

    网上的解决方案是这样子的。

            //一.找到第一周的最后一天(先获取1月1日是星期几,从而得知第一周周末是几)
                int firstWeekend=7-Convert.ToInt32(DateTime.Parse(DateTime.Today.Year + "-1-1").DayOfWeek);
                
                //二.获取今天是一年当中的第几天
                int currentDay = DateTime.Today.DayOfYear;
                //三.(今天 减去 第一周周末)/7 等于 距第一周有多少周 再加上第一周的1 就是今天是今年的第几周了
                //    刚好考虑了惟一的特殊情况就是,今天刚好在第一周内,那么距第一周就是0 再加上第一周的1 最后还是1
                return Convert.ToInt32(Math.Ceiling((currentDay - firstWeekend) / 7.0)) + 1;

    2016年还没问题,但是到了2017年1月1号,那天刚好是周日,就开始算错了。

    然后稍微做了修改,之后是这样。

           var dt = new DateTime(2017, 01, 01);
                //找到今年的第一天是周几
                int firstWeekend = Convert.ToInt32(DateTime.Parse(dt.Year + "-1-1").DayOfWeek);
    
                //获取第一周的差额,如果是周日,则firstWeekend为0,第一周也就是从周天开始的。
                int weekDay = firstWeekend == 0 ? 1 : (7 - firstWeekend + 1);
    
                //获取今天是一年当中的第几天
                int currentDay = dt.DayOfYear;
    
                //(今天 减去 第一周周末)/7 等于 距第一周有多少周 再加上第一周的1 就是今天是今年的第几周了
                //    刚好考虑了惟一的特殊情况就是,今天刚好在第一周内,那么距第一周就是0 再加上第一周的1 最后还是1
                int current_week = Convert.ToInt32(Math.Ceiling((currentDay - weekDay) / 7.0)) + 1;

    计算正确。

  • 相关阅读:
    Splay 详解
    莫队套值域分块
    浅谈区间众数
    回滚莫队分块
    带修莫队分块
    微服务规划准则
    mysql查询包含逗号的数据,并逗号拆分为多行展现
    python mysql 单连接和连接池简单示例
    代理模式八:装饰者模式
    代理模式七:迭代器模式
  • 原文地址:https://www.cnblogs.com/ariklee/p/5098095.html
Copyright © 2011-2022 走看看