C# 中计算第几周的几种方法
来源:互联网 发布:xp保存网络密码 编辑:程序博客网 时间:2024/05/21 21:37
有时候在ERP中,会用到周期计算,甚至是以周期为条件的功能,我在公司就遇到了这种情况,很多事情都围绕着周期计算,将内容放入到周期中,直接上解决办法吧。
中国的日历与国际日历有所不同,中国万年历,是以星期一为开始,周日为结束,国际上是以周日开始,周六结束。
public static int Excute(DateTime dTime)
{
var dayOfYear = dTime.DayOfYear; //确定此时间在一年中的位置
var tempDate = new DateTime(dTime.Year, 1, 1);//当年第一天
var tempDayOfWeek = (int)tempDate.DayOfWeek;//确定当年第一天
tempDayOfWeek = tempDayOfWeek == 0 ? 7 : tempDayOfWeek;
var index = (int)dTime.DayOfWeek;//确定星期几
index = index == 0 ? 7 : index;
DateTime retStartDay = dTime.AddDays(-(index - 1));//当前周的范围
DateTime retEndDay = dTime.AddDays(7 - index);
var weekIndex = (int)Math.Ceiling(((double)dayOfYear + tempDayOfWeek - 1) / 7);//确定当前是第几周
if (retStartDay.Year < retEndDay.Year)
{
weekIndex = 1;
}
return weekIndex;
}
这种计算方式有一个局限,那就是当周期超过52周,以后,跨年的那几天,我是说下一年1月1日前几天又可能会被算作第一周。
后来我又发现了这种方式:
private static int GetWeekOfYear(DateTime dt)
{
GregorianCalendar gc = new GregorianCalendar();
int weekOfYear = gc.GetWeekOfYear(dt, CalendarWeekRule.FirstDay, DayOfWeek.Monday);
return weekOfYear;
}
但是这种方式同样也是按中国的日期计算方式,当需要使用sql server 的函数DATEPART
筛选数据的时候,两个又矛盾了,下面才是终极解决方案:
public static int WeekOfYear(DateTime dt, CultureInfo ci){
return ci.Calendar.GetWeekOfYear(dt, ci.DateTimeFormat.CalendarWeekRule, ci.DateTimeFormat.FirstDayOfWeek);
}
调用方法:WeekOfYear(DateTime.Now, new CultureInfo("zh-CN"));
- C# 中计算第几周的几种方法
- C#里的周计算,第几周,一周的开始......
- 计算当前日期为第几周WEEK_OF_YEAR的正确方法
- 计算本周是一年中第几周
- 根据日期计算所在月的第几周和星期几
- C#中怎么计算当前日期是在一年中的第几周
- C#中怎么计算当前日期是在一年中的第几周
- php中计算时间差的几种方法
- php中计算时间差的几种方法
- php中计算时间差的几种方法
- php中计算时间差的几种方法
- php中计算时间差的几种方法
- php中计算时间差的几种方法
- Matlab中计算程序运行时间的几种方法
- 月中第几周的周几算法
- C# / ASP.NET 计算某个日期所在的周是当年的第几周
- C# 获得 某年某月第几个星期几 的日期
- 计算今天为今年的第几周
- SlidingMenu源码分析及拓展:监听拉出菜单时的滚动事件,将主页变暗
- springMvc 完美解决 multipart/form-data 方式提交请求 在 Filter 中 ServletRequest.getParameter方法 获取不到参数的问题
- 有声书-恶魔的奶爸节选
- Ubuntu 16.04 kinetic上移植安装嵌入式版本cartographer
- python 3 网络爬取图片之二
- C# 中计算第几周的几种方法
- 使用 Python 实现鼠标键盘自动化
- spring源代码解析收藏
- delphi Controls Components 属性
- python 递归比较两个dict或json(相等,包含)
- POI实现EXCEL单元格合并及边框样式
- Objective-c - block作为方法的参数
- webSocket获取httpSession
- vue1x、vue-router 0.7x 迁移到 vue2 vue-router2 vueX的坑