根据起止日期构建指定查询条件:第N周(yyyy-MM-dd/yyyy-MM-dd)
项目中有个查询模块中用到查询条件: 年和周。 以往我直接指定是第几周,后来测试反映如果直接选择周的话并不知道所选周代表的年月日,而无法最快查询数据,后更改查询条件如下: 指定一个起始年月,根据起始年月计算出第一周的日子,然后在第一周的基础上计算剩余周。
效果图:


算法代码:
List<dynamic> list2 = new List<dynamic>();
DateTime startDate = DateTime.Parse("2014" + "-01-01");
DateTime endDate = DateTime.Parse("2014" + "-12-31");
TimeSpan ts = (TimeSpan)(endDate - startDate);
int countday = int.Parse(ts.TotalDays.ToString());//总天数
int startweek = Convert.ToInt32(startDate.DayOfWeek.ToString("d"));//开始日期星期几
startweek = startweek == 0 ? 7 : startweek;//星期日为0改为7
DateTime startDate2 = startDate.AddDays(-startweek + 1);//把第一周凑满的开始日期
countday += startweek - 1;//再计算总天数
double countweek = Math.Ceiling((double)countday / 7);
if (countweek > 0)
{
list2.Add(new { ID = 1, Name = "第1周(" + startDate.ToString("yyyy-MM-dd") + "/" + (startDate2.AddDays(6)).ToString("yyyy-MM-dd") + ")" });
} for (int w = 2; w <= countweek; w++)
{
if (w != countweek)
{
list2.Add(new { ID = w, Name = "第" + w.ToString() + "周(" + startDate2.AddDays(7 * (w - 1)).ToString("yyyy-MM-dd") + "/" + (startDate2.AddDays((7 * w) - 1).ToString("yyyy-MM-dd")) + ")" });
}
else
{
list2.Add(new { ID = w, Name = "第" + w.ToString() + "周(" + startDate2.AddDays(7 * (w - 1)).ToString("yyyy-MM-dd") + "/" + (endDate.ToString("yyyy-MM-dd")) + ")" });
}
} ddlHoursdistribution.DataSource = list2;
ddlHoursdistribution.DataBind();
关键点就是根据开始日期计算第一周的时间,比如2013-1-1周二,那么就在周的基础上减去1天,等于起点就到2012-12-30了,然后在这个基础上+6,完成第一周的计算,剩下的就直接在计算后的日期上相加,由于个人对算法的知识了解的少,请教同事后得出该算法,感谢我的同事。
根据起止日期构建指定查询条件:第N周(yyyy-MM-dd/yyyy-MM-dd)的更多相关文章
- 指定查询条件,查询对应的集合List(单表)
TestDao.java(测试类) @Test public void findCollectionByConditionNoPage(){ ApplicationContext ac = new ...
- Lambda 中如果构建一个查询条件,扔该Where返回我们需要的数据。
有一个需求,比如所 省市县 这三个查询条件 都可能有可能没有,但是我们的查询条件怎么构建呢 首先需要看一下 Lambda中Where这个方法需要什么参数 public static IEnumerab ...
- MySql:SELECT 语句(三) WHERE 指定查询条件
1.WHERE 子句条件操作符 包括:> .<.>=.<=.!= .=.BETWEEN ... AND ...(在指定的两个值之间) 示例: 1)select * from s ...
- 使用Spring Data JPA的Specification构建数据库查询
Spring Data JPA最为优秀的特性就是可以通过自定义方法名称生成查询来轻松创建查询SQL.Spring Data JPA提供了一个Repository编程模型,最简单的方式就是通过扩展Jpa ...
- MySQL单表查询 条件查询,分组
目录 1 where 条件查询 between like not in 2 group by 分组 聚合函数:max min sum avg count 3 having 过滤 4 distinct ...
- SpringBoot使用注解的方式构建Elasticsearch查询语句,实现多条件的复杂查询
背景&痛点 通过ES进行查询,如果需要新增查询条件,则每次都需要进行硬编码,然后实现对应的查询功能.这样不仅开发工作量大,而且如果有多个不同的索引对象需要进行同样的查询,则需要开发多次,代码复 ...
- LINQ to SQL 运行时动态构建查询条件
在进行数据查询时,经常碰到需要动态构建查询条件.使用LINQ实现这个需求可能会比以前拼接SQL语句更麻烦一些.本文介绍了3种运行时动态构建查询条件的方法.本文中的例子最终实现的都是同一个功能,从Nor ...
- 使用构造器模式动态构建Map作为mybatis的查询条件
import com.alibaba.fastjson.JSON; import com.fasterxml.jackson.databind.ObjectMapper; import com.fas ...
- 在Bootstrap开发框架中使用bootstrapTable表格插件和jstree树形列表插件时候,对树列表条件和查询条件的处理
在我Boostrap框架中,很多地方需要使用bootstrapTable表格插件和jstree树形列表插件来共同构建一个比较常见的查询界面,bootstrapTable表格插件主要用来实现数据的分页和 ...
随机推荐
- PHP之几道面试题
1.二分查找算法 function two_find($arr,$low,$height,$k){ if($low<=$height){ $mid = intval(($low+$height) ...
- SQL Server2005清除数据库日志
SQL2005清空删除日志: 复制代码 代码如下: Backup Log DNName with no_log '这里的DNName是你要收缩的数据库名,自己注意修改下面的数据库名,我就不再注释了 ...
- PHP基础知识之常量
定义: define("FOO", "something");
- linux进程管理(上)
程序和进程的区别: 1.程序是一种静态资源 程序启动产生进程 2.程序与进程无一一对应原则 进程是动态的一个过程 父进程和子进程在前面提过 前台进程:执行命令时只能等待的进程为前台进程也叫异步进程 ...
- IT人生知识分享:概率与运气
前言: 最近的人生多了些体验,也读了些许书,感觉还是有些知识是可以分享的. 今天难得周六,特意开电脑了,花几个小时写写,和大伙分享分享点知识. 以下内容,更多的需要读者思考,所以结论不会写太清晰,但一 ...
- 一步一步学ROP之linux_x86篇
一步一步学ROP之linux_x86篇 作者:蒸米@阿里聚安全 一.序 ROP的全称为Return-oriented programming(返回导向编程),这是一种高级的内存攻击技术可以用来绕过 ...
- C语言 · 矩阵乘法
问题描述 输入两个矩阵,分别是m*s,s*n大小.输出两个矩阵相乘的结果. 输入格式 第一行,空格隔开的三个正整数m,s,n(均不超过200). 接下来m行,每行s个空格隔开的整数,表示矩阵A(i,j ...
- 使用JAVA编写电话薄程序,具备添加,查找,删除等功能
//该程序需要连接数据库.根据word文档要求所有功能均已实现.//大部分方法基本差不多,//在查询修改的时候能输出 最大ID号 和最小ID号,并且可以对输入的ID号进行判断是否存在(具体方法请查看 ...
- Execute Sql Task 的Result DataSet如何返回
Execute Sql Task的Result DataSet 主要有以下四种,当Execute Sql Task返回结果之后,需要使用SSIS Variable 来接收数据. 例子中使用的数据表代码 ...
- 数据结构与算法JavaScript (五) 串(经典KMP算法)
KMP算法和BM算法 KMP是前缀匹配和BM后缀匹配的经典算法,看得出来前缀匹配和后缀匹配的区别就仅仅在于比较的顺序不同 前缀匹配是指:模式串和母串的比较从左到右,模式串的移动也是从 左到右 后缀匹配 ...