c#中计算当前时间是今年第几周 与ORACLE数据库中ww转化相同

12 篇文章 0 订阅
6 篇文章 0 订阅

为了在程序中生成的当前时间是第几周的判断结果与ORCAL中的相同。因为在做周报 ,周报统计的数据计算周数是数据库算的,列表页面又是C#定时任务。

原有的C#计算当前时间是第几周的方法是这样的

    GregorianCalendar gc = new GregorianCalendar();
    int weekOfYear = gc.GetWeekOfYear(DateTime.Now, CalendarWeekRule.FirstDay, DayOfWeek.Monday); 

C#中是这样计算:
2022年1月1号是周六 是第一周 weekOfYear =1
2022年1月3号是周一 是第二周 weekOfYear =2

数据库中是这样计算

to_char(sysdate, 'WW')
to_char(sysdate, 'IW')

注意在这里进行一下区分IW WW两种格式
IW:
IW是指的自然周的计算方法
例如:
sysdate=2022年1月1号
2022年1月1号是周六 to_char(sysdate, ‘IW’)= 0
2022年1月3号是周一 to_char(sysdate+3, ‘IW’) =1
那么对于数据库来说第一周其实是1月3号那一周,它是以第一个周一来当第一个完整周。可想而知前面几天就丢掉了。
WW:
指的是2022年1月1号是周六 那么1月1号算第一周 1月8号是第二周
2022年1月1号是周六 to_char(sysdate, ‘WW’)= 1
2022年1月3号是周一 to_char(sysdate+3, ‘WW’) =1
2022年1月3号是周一 to_char(sysdate+7, ‘WW’) =2

为了在C#中能计算出的周数与数据库相同于是这样写:

思路梳理 :首先算出今天是今年的第几天 (下文代码中的yearcountday ) 再用yearcountday 除 7 取整数+1 就能得到与数据库中WW算法相同的周数

           int yearcountday = 0;
            int week = 0;
            for (int i = 1; i <= DateTime.Now.Month; i++)
            {
                string day = DateTime.Now.Year.ToString() + "-" + (i + 1).ToString() + "-01";
                DateTime dateTime = Convert.ToDateTime(day).AddDays(-1);
                if (i == DateTime.Now.Month)
                {
                    dateTime = DateTime.Now;
                }
     			//dateTime.Day代表这个月有多少天
                yearcountday += dateTime.Day;
                
            }
            
            week =( yearcountday / 7) +1;
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值