java按照日期查询,查询不到结束日期所对应的数据

效果如下:可以查到结束日期的数据:
这里写图片描述
这里写图片描述
原因(1):仔细检查所查询日期内是否有数据

     (2):如有数据:就需要对时间进行加减

           因为所选时间只可以截至到00:00;比如查询到2016-11-11的数据

           此时只能查到2016-11-11 00:00:00的数据,也就是前一天的数据;

           所以需要将 日期加上23:59:59;
前台代码如下:
<html lang="en">

<head>
</head>
<body>

    <div class="inforbox selectinforbox">   
    <form action="/Back/backList.html" method="post">  <!--form提交-->                  
      <div class="row">                
        <span>注册时间:</span>                   
            <input type="text" value="${startTime }" placeholder="开始时间" onclick="WdatePicker({dateFmt:&quot;yyyy-MM-dd&quot;})" class="input input-medium" name="startTime" id="startTime" ><!--My97日期控件 -->

           <input type="text" value="${endTime }" placeholder="结束时间" onclick="WdatePicker({dateFmt:&quot;yyyy-MM-dd&quot;})" class="input input-medium" name="endTime" id="endTime">
        </div>
        <input type="submit" class="searchbtn search" value="搜索">
     </form>
    </div>
</body>

后台代码如下:

    public class BackAction {
       public String SalsemanSeedList(Model model, HttpServletRequest request,
            @RequestParam(value = "startTime", required = false) String startTime1,//开始时间
            @RequestParam(value = "endTime", required = false) String endTime1,//结束时间
            @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo){            
           if(StringUtils.isNotBlank(startTime1)){ 
                Map<String,Object> map = new HashMap<String,Object>();
                Date startTime = null;
                Date endTime = null;
                String startTimeStr = startTime1+" 00:00:00";//将时开始时间加上时分秒
                String endTimeStr = "";
                if(StringUtils.isBlank(endTime1)){
                    endTimeStr =  DateUtil.format(new Date(),"yyyy-MM-dd")+" 23:59:59";//如果没有填写结束时间,那么就是当前天加上23:59:59
                }else{
                    endTimeStr = endTime1+" 23:59:59";     //如果不为空,就将时间直接加23:59:59
                }
                startTime = DateUtil.parse(startTimeStr, "yyyy-MM-dd HH:mm:ss");      //再将开始时间与结束时间转成Date类型
                endTime = DateUtil.parse(endTimeStr, "yyyy-MM-dd HH:mm:ss");
                map.put("startTime", startTime);
                map.put("endTime", endTime);
            }else{
                map.put("startTime", null);
                map.put("endTime", null);
            }
        List<SuBuyBack> buyBackList= buyBackService.selectBackBySalesmanId(map);
        model.addAttribute("startTime", startTime == null?null:DateUtil.format(startTime,"yyyy-MM-dd"));//将开始时间返回到页面
        model.addAttribute("endTime",endTime == null?null:DateUtil.format(endTime,"yyyy-MM-dd") );//将结束时间返回到页面
  }
}      
      注意 :最后将时间转成Date()类型进入数据库查询
                 这样就可以查出开始时间的yyyy-MM-dd  00:00:00到结束日期的yyyy-MM-dd  59:59:59

希望对你有点帮助

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
前言:本资源来自于javaeye,原资源链接地址:http://www.javaeye.com/topic/67398 原文如下: 以前写了一个java的正规表达式的java工具类,分享一下,有用到的欢迎下载使用。 如果你有常用的定义好的,且测试通过的正规表达式,欢迎跟贴,也让我享用一下 . 类中用到了 jakarta-oro-2.0.jar 包,请大家自己在 apache网站下下载 在这是junit测试单元类我就不提交了,在main()方法中有几个小测试,有兴趣自己玩吧. 这个工具类目前主要有25种正规表达式(有些不常用,但那时才仔细深入的研究了一下正规,写上瘾了,就当时能想到的都写了): 1.匹配图象; 2 匹配email地址; 3 匹配匹配并提取url ; 4 匹配并提取http ; 5.匹配日期 6 匹配电话; 7 匹配身份证 8 匹配邮编代码 9. 不包括特殊字符的匹配 (字符串中不包括符号 数学次方号^ 单引号' 双引号" 分号; 逗号, 帽号: 数学减号- 右尖括号> 左尖括号 0) 12 匹配正整数 13 匹配非正整数(负整数 + 0) 14 匹配负整数; 15. 匹配整数 ; 16 匹配非负浮点数(正浮点数 + 0) 17. 匹配正浮点数 18 匹配非正浮点数(负浮点数 + 0) 19 匹配负浮点数; 20 .匹配浮点数; 21. 匹配由26个英文字母组成的字符串; 22. 匹配由26个英文字母的大写组成的字符串 23 匹配由26个英文字母的小写组成的字符串 24 匹配由数字和26个英文字母组成的字符串; 25 匹配由数字、26个英文字母或者下划线组成的字符串; java源码: /* * Created on 2005-4-15 * * Summary of regular-expression constructs 正则表达式结构简介: * Construct Matches * Characters 字符: * x The character x x 字符 x * \\ The backslash character \\ 反斜杠 * \0n The character with octal value 0n (0 <= n <= 7) \0n 十进制数 (0 <= n <= 7) * \0nn The character with octal value 0nn (0 <= n <= 7) \0nn 十进制数 0nn (0 <= n <= 7) * \0mnn The character with octal value 0mnn (0 <= m <= 3, 0 <= n <= 7) \0mnn 十进制数 0mnn (0 <= m <= 3, 0 <= n <= 7) * \xhh The character with hexadecimal value 0xhh \xhh 十六进制数 0x
abstract (关键字) 抽象 ['æbstrækt] access vt.访问,存取 ['ækses]'(n.入口,使用权) algorithm n.算法 ['ælgәriðm] Annotation [java] 代码注释 [ænәu'teiʃәn] anonymous adj.匿名的[ә'nɒnimәs]'(反义:directly adv.直接地,立即[di'rektli, dai'rektli]) apply v.应用,适用 [ә'plai] application n.应用,应用程序 [,æpli'keiʃәn]' (application crash 程序崩溃) arbitrary a.任意的 ['ɑ:bitrәri] argument n.参数;争论,论据 ['ɑ:gjumәnt]'(缩写 args) assert (关键字) 断言 [ә'sә:t] ' (java 1.4 之后成为关键字) associate n.关联(同伴,伙伴) [ә'sәuʃieit] attribute n.属性(品质,特征) [ә'tribju:t] boolean (关键字) 逻辑的, 布尔型 call n.v.调用; 呼叫; [kɒ:l] circumstance n.事件(环境,状况) ['sә:kәmstәns] crash n.崩溃,破碎 [kræʃ] cohesion 内聚,黏聚,结合 [kәu'hi:ʒәn] (a class is designed with a single, well-focoused purpose. 应该不止这点) command n. 命令,指令 [kә'mɑ:nd](指挥, 控制) (command-line 命令行) Comments [java] 文本注释 ['kɒments] compile [java] v.编译 [kәm'pail]' Compilation n.编辑[,kɒmpi'leiʃәn] const (保留字) constant n. 常量, 常数, 恒量 ['kɒnstәnt] continue (关键字) coupling 耦合,联结 ['kʌpliŋ] making sure that classes know about other classes only through their APIs. declare [java] 声明 [di'klєә] default (关键字) 默认值; 缺省值 [di'fɒ:lt] delimiter 定义符; 定界符 Encapsulation[java] 封装 (hiding implementation details) Exception [java] 例外; 异常 [ik'sepʃәn] entry n.登录项, 输入项, 条目['entri] enum (关键字) execute vt.执行 ['eksikju:t] exhibit v.显示, 陈列 [ig'zibit] exist 存在, 发生 [ig'zist] '(SQL关键字 exists) extends (关键字) 继承、扩展 [ik'stend] false (关键字) final (关键字) finally (关键字) fragments 段落; 代码块 ['frægmәnt] FrameWork [java] 结构,框架 ['freimwә:k] Generic [java] 泛型 [dʒi'nerik] goto (保留字) 跳转 heap n.堆 [hi:p] implements (关键字) 实现 ['implim
系统描述 基于SSH和jQuery框架完成的考勤系统设计。 使用语言为JavaJavascript、CSS以及TSQL 模块分析 员工表 字段: 员工编号 员工姓名 员工部门 员工密码 员工权限 考勤记录 字段: 迟到、早退、漏签卡、早会未到、早操未到、会议缺席:单选 考勤日期:弹出日期窗口选择 员工姓名:来自员工表,下拉选择单选 考勤时段:来自数据字典表(具体内容有:上午上班、上午下班、下午上班、下午下班),下拉选择单选 考勤说明:文字录入 记录人:默认登录人 假期申请 字段: 请假时限:日期弹出日期窗口选择,时间录入或弹出时钟窗口选择 假期时长:天数、小时录入数字,小时录入时必须小于8 假期类别:来自数据字典表(具体内容有:病假、事假、产假),下拉单选 请假原因:文字录入 出差申请 字段: 出差日期:弹出日期窗口选择 出差天数:录入数字 同行人员:来自员工表,应能多选 目的地:录入文字 出行方式:来自数据字典表(具体内容有:大巴、飞机、火车、自驾),下拉单选 出差事由:录入文字 加班申请 字段: 申请日期:默认系统当前日期 加班日期:弹出日期窗口选择 加班时长:录入数字,小数点一位 加班原因:录入文字 调休申请 字段: 申请日期:默认系统当前日期 调休时间:弹出日期窗口选择 未休时长:系统自动计算,不可修改,计算方法是:所有加班时长 - 所有调休时长;其中加班时长来自加班申请。 调休时长:录入数字,小数点一位 调休原因:录入文字 考勤申请 界面中外出次数、签卡次数不需要统计,对应的页面也不需要。第一页是考勤汇总,其他页面显示某个员工的明细信息,比如点击请假这一页,自动显示第1页所选员工在时间段内请假的明细记录。统计请假时长时,按每天8小时换算成天。 数据字典 类型:出行方式、假期类别 说明:汽车、火车…. 数据库 employee 表 属性 数据类型 说明 Eno Number(4) 编号 Ename Varchar2(20) 员工姓名 Password Varchar2(20) 密码 Dept Varchar2(20) 部门 Tq Varchar2(20) 管理员或员工 kqb 表 属性 数据类型 说明 Kqbh Number 记录编号 Kqsj Varchar2(20) 考勤时间 Lb Varchar2(20) 类别 Ygxm Varchar2(20) 员工姓名 Kqsd Varchar2(20) 考勤时段 Kqsm Varchar2(20) 说明 jlr Varchar2(20) 记录人 jq表 属性 数据类型 说明 jqno Number(4) 编号 Kssj Varchar2(20) 开始时间 Jssj Varchar2(20) 结束时间 Sc Varchar2(20) 时长 Jqlx Varchar2(20) 类型 Jqyy Varchar2(20) 请假原因 Zt Varchar2(20) 状态 Sqr Varchar2(20) 申请人 Spr Varchar2(20) 审批人 Jiaban 表 属性 数据类型 说明 Jno Number(4) 编号 Sqrq Varchar2(20) 申请日期 Jbrq Varchar2(20) 加班日期 jbsc Varchar2(20) 加班时长 jbyy Varchar2(20) 加班原因 Zt Varchar2(20) 状态 Spr Varchar2(20) 审批人 Sqr Varchar2(20) 申请人 chuchai 表 属性 数据类型 说明 Cno Varchar2(20) 编号 ccrq Varchar2(20) 出差日期 ccts Varchar2(20) 出差天数 txry Varchar2(20) 同行人员 mdd Varchar2(20) 目的地 cxfs Varchar2(20) 出差方式 ccsy Varchar2(20) 出差原因 zt Varchar2(20) 状态 sqr Varchar2(20) 申请人 spr Varchar2(20) 审批人 sjzd 表 属性 数据类型 说明 Sno Varchar2(20) 编号 Lx Varchar2(20) 类型 Sm Varchar2(20) 说明 Tiaoxiu 表 属性 数据类型 说明 Tno number 编号 sqrq Varchar2(20) 申请日期 wxsc Varchar2(20) 未休时长 txsc Varchar2(20) 调休时长 txyy Varchar2(20) 调休原因 Zt Varchar2(20) 状态 Spr Varchar2(20) 申请人 Sqr Varchar2(20) 审批人 Kssj Va
1 概述 首先需要说明的一点,无论是Winform,还是Webform,都有很成熟的日历控件,无论从易用性还是可扩展性上看,日期的选择和校验还是用日历控件来实现比较好。 前几天在CSDN多个版块看到需要日期正则的帖子,所以整理了这篇文章,和大家一起讨论交流,如有遗漏或错误的地方,还请大家指正。 日期正则一般是对格式有要求,且数据不是直接由用户输入时使用。因应用场景的不同,写出的正则也不同,复杂程度也自然不同。正则的书写需要根据具体情况具体分析,一个基本原则就是:只写合适的,不写复杂的。 对于日期提取,只要能与非日期区分开,写最简单的正则即可,如 \d{4}-\d{2}-\d{2} 如果可以在源字符串中唯一定位yyyy-MM-dd格式的日期,则可用做提取。 对于验证,如果仅仅是验证字符组成及格式是没有多大意义的,还要加入对规则的校验。由于闰年的存在,使得日期的校验正则变得比较复杂。 先来考察一下日期的有效范围以及什么是闰年。 2 日期的规则 2.1 日期的有效范围 对于日期的有效范围,不同的应用场景会有所不同。 MSDN中定义的DateTime对象的有效范围是:0001-01-01 00:00:00到9999-12-31 23:59:59。 UNIX时间戳的0按照ISO 8601规范为 :1970-01-01T00:00:00Z。 而实际应用中,日期的范围基本上不会超出DateTime所规定的范围,所以正则验证取其中常用的日期范围即可。 2.2 什么是闰年 (以下摘自百度百科) 闰年(leap year)是为了弥补因人为历法规定造成的年度天数与地球实际公转周期的时间差而设立的。补上时间差的年份为闰年。 地球绕日运行周期为365天5小时48分46秒(合365.24219天),即一回归年(tropical year)。公历的平年只有365日,比回归年短约0.2422 日,每四年累积约一天,把这一天加于2月末(即2月29日),使当年时间长度变为366日,这一年就为闰年。 需要注意的是,现在的公历是根据罗马人的“儒略历”改编而得。由于当时没有了解到每年要多算出0.0078天的问题,从公元前46年,到16世纪,一共累计多出了10天。为此,当时的教皇格雷果里十三世,将1582年10月5日人为规定为10月15日。并开始了新闰年规定。即规定公历年份是整百数的,必须是400的倍数才是闰年,不是400的倍数的就是平年。比如,1700年、1800年和1900年为平年,2000年为闰年。此后,平均每年长度为365.2425天,约4年出现1天的偏差。按照每四年一个闰年计算,平均每年就要多算出0.0078天,经过四百年就会多出大约3天来,因此,每四百年中要减少三个闰年。闰年的计算,归结起来就是通常说的:四年一闰;百年不闰,四百年再闰。 2.3 日期的格式 根据不同的语言文化,日期的连字符会有所不同,通常有以下几种格式: yyyyMMdd yyyy-MM-dd yyyy/MM/dd yyyy.MM.dd 3 日期正则表达式构建 3.1 规则分析 写复杂正则的一个常用方法,就是先把不相关的需求拆分开,分别写出对应的正则,然后组合,检查一下相互的关联关系以及影响,基本上就可以得出对应的正则。 按闰年的定义可知,日期可以有几种分类方法。 3.1.1 根据天数是否与年份有关划分为两类 与年份无关的一类中,根据每月天数的不同,又可细分为两类  1、3、5、7、8、10、12月为1-31日  4、6、9、11月为1-30日 与年份有关的一类中  平年2月为1-28日  闰年2月为1-29日 3.1.2 根据包含日期不同可划分为四类  所有年份的所有月份都包含1-28日  所有年份除2月外都包含29和30日  所有年份1、3、5、7、8、10、12月都包含31日  闰年2月包含29日 3.1.3 分类方法选择 因为日期分类之后的实现,是要通过(exp1|exp2|exp3)这种分支结构来实现的,而分支结构是从左侧分支依次向右开始尝试匹配,当有一个分支匹配成功时,就不再向右尝试,否则尝试所有分支后并报告失败。 分支的多少,每个分支的复杂程度都会影响匹配效率,考虑到被验证日期概率分布,绝大多数都是落到1-28日内,所以采用第二种分类方法,会有效提高匹配效率。 3.2 正则实现 采用3.1.2节的分类方法,就可以针对每一个规则写出对应的正则,以下暂按MM-dd格式进行实现。 先考虑与年份无关的前三条规则,年份可统一写作 (?!0000)[0-9]{4} 下面仅考虑月和日的正则  包括平年在内的所有年份的月份都包含1-28日 (0[1-9]|1[0-2])-(0[1-9]|1[0-9]|2[0-8])  包括平年在内的所有年份除2月外都包含29和30日 (0[13-9]|1[0-2])-(29|30)  包括平年在内的所有年份1、3、5、7、8、10、12月都包含31日 (0[13578]|1[02])-31) 合起来就是除闰年的2月29日外的其它所有日期 (?!0000)[0-9]{4}-((0[1-9]|1[0-2])-(0[1-9]|1[0-9]|2[0-8])|(0[13-9]|1[0-2])-(29|30)|(0[13578]|1[02])-31) 接下来考虑闰年的实现  闰年2月包含29日 这里的月和日是固定的,就是02-29,只有年是变化的。 可通过以下代码输出所有的闰年年份,考察规则 for (int i = 1; i < 10000; i++) { if ((i % 4 == 0 && i % 100 != 0) || i % 400 == 0) { richTextBox2.Text += string.Format("{0:0000}", i) + "\n"; } } 根据闰年的规则,很容易整理出规则,四年一闰; ([0-9]{2}(0[48]|[2468][048]|[13579][26]) 百年不闰,四百年再闰。 (0[48]|[2468][048]|[13579][26])00 合起来就是所有闰年的2月29日 ([0-9]{2}(0[48]|[2468][048]|[13579][26])|(0[48]|[2468][048]|[13579][26])00)-02-29) 四条规则都已实现,且互相间没有影响,合起来就是所有符合DateTime范围的日期的正则 ^((?!0000)[0-9]{4}-((0[1-9]|1[0-2])-(0[1-9]|1[0-9]|2[0-8])|(0[13-9]|1[0-2])-(29|30)|(0[13578]|1[02])-31)|([0-9]{2}(0[48]|[2468][048]|[13579][26])|(0[48]|[2468][048]|[13579][26])00)-02-29)$ 考虑到这个正则表达式仅仅是用作验证,所以捕获组没有意义,只会占用资源,影响匹配效率,所以可以使用非捕获组来进行优化。 ^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$ 以上正则年份0001-9999,格式yyyy-MM-dd。可以通过以下代码验证正则的有效性和性能 DateTime dt = new DateTime(1, 1, 1); DateTime endDay = new DateTime(9999, 12, 31); Stopwatch sw = new Stopwatch(); sw.Start(); Regex dateRegex = new Regex(@"^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$"); //Regex dateRegex = new Regex(@"^((?!0000)[0-9]{4}-((0[1-9]|1[0-2])-(0[1-9]|1[0-9]|2[0-8])|(0[13-9]|1[0-2])-(29|30)|(0[13578]|1[02])-31)|([0-9]{2}(0[48]|[2468][048]|[13579][26])|(0[48]|[2468][048]|[13579][26])00)-02-29)$"); Console.WriteLine("开始日期: " + dt.ToString("yyyy-MM-dd")); while (dt < endDay) { if (!dateRegex.IsMatch(dt.ToString("yyyy-MM-dd"))) { Console.WriteLine(dt.ToString("yyyy-MM-dd") + " false"); } dt = dt.AddDays(1); } if (!dateRegex.IsMatch(dt.ToString("yyyy-MM-dd"))) { Console.WriteLine(dt.ToString("yyyy-MM-dd") + " false"); } Console.WriteLine("结束日期: " + dt.ToString("yyyy-MM-dd")); sw.Stop(); Console.WriteLine("测试用时: " + sw.ElapsedMilliseconds + "ms"); Console.WriteLine("测试完成!"); Console.ReadLine(); 4 日期正则表达式扩展 4.1 “年月日”形式扩展 以上实现的是yyyy-MM-dd格式的日期验证,考虑到连字符的不同,以及月和日可能为M和d,即yyyy-M-d的格式,可以对以上正则进行扩展 ^(?:(?!0000)[0-9]{4}([-/.]?)(?:(?:0?[1-9]|1[0-2])([-/.]?)(?:0?[1-9]|1[0-9]|2[0-8])|(?:0?[13-9]|1[0-2])([-/.]?)(?:29|30)|(?:0?[13578]|1[02])([-/.]?)31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)([-/.]?)0?2([-/.]?)29)$ 使用反向引用进行简化,年份0001-9999,格式yyyy-MM-dd或yyyy-M-d,连字符可以没有或是“-”、“/”、“.”之一。 ^(?:(?!0000)[0-9]{4}([-/.]?)(?:(?:0?[1-9]|1[0-2])\1(?:0?[1-9]|1[0-9]|2[0-8])|(?:0?[13-9]|1[0-2])\1(?:29|30)|(?:0?[13578]|1[02])\1(?:31))|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)([-/.]?)0?2\2(?:29))$ 这就是“年月日”这种形式最全的一个正则了,不同含义部分以不同颜色标识,可以根据自己的需要进行栽剪。 4.2 其它形式扩展 了解了以上正则各部分代表的含义,互相间的关系后,就很容易扩展成其它格式的日期正则,如dd/MM/yyyy这种“日月年”格式的日期。 ^(?:(?:(?:0?[1-9]|1[0-9]|2[0-8])([-/.]?)(?:0?[1-9]|1[0-2])|(?:29|30)([-/.]?)(?:0?[13-9]|1[0-2])|31([-/.]?)(?:0?[13578]|1[02]))([-/.]?)(?!0000)[0-9]{4}|29([-/.]?)0?2([-/.]?)(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00))$ 这种格式需要注意的就是不能用反向引用来进行优了。连字符等可根据自己的需求栽剪。 4.3 添加时间的扩展 时间的规格很明确,也很简单,基本上就HH:mm:ss和H:m:s两种形式。 ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] 合入到日期的正则中,yyyy-MM-dd HH:mm:ss ^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)\s+([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]$ 4.4 年份定制 以上所有涉及到平年的年份里,使用的是0001-9999。当然,年份也可以根据闰年规则定制。 如年份1600-9999,格式yyyy-MM-dd或yyyy-M-d,连字符可以没有或是“-”、“/”、“.”之一。 ^(?:(?:1[6-9]|[2-9][0-9])[0-9]{2}([-/.]?)(?:(?:0?[1-9]|1[0-2])\1(?:0?[1-9]|1[0-9]|2[0-8])|(?:0?[13-9]|1[0-2])\1(?:29|30)|(?:0?[13578]|1[02])\1(?:31))|(?:(?:1[6-9]|[2-9][0-9])(?:0[48]|[2468][048]|[13579][26])|(?:16|[2468][048]|[3579][26])00)([-/.]?)0?2\2(?:29))$ 5 特别说明 以上正则采用的是最基本的正则语法规则,绝大多数采用传统NFA引擎的语言都可以支持,包括JavaScript、Java、.NET等。 另外需求说明的是,虽然日期的规则相对明确,可以采用这种方式裁剪来得到符合要求的日期正则,但是并不推荐这样使用正则,正则的强大在于它的灵活性,可以根据需求,量身打造最合适的正则,如果只是用来套用模板,那正则也就不称其为正则了。 正则的语法规则并不多,而且很容易入门,掌握语法规则,量体裁衣,才是正则之“道”。
Java 中,可以使用 Calendar 类来查询每个月的起始日期结束日期。 下面是一个示例代码,它可以查询今年每个月的起始日期结束日期: ``` import java.util.Calendar; import java.util.Date; public class Main { public static void main(String[] args) { Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.MONTH, Calendar.JANUARY); calendar.set(Calendar.DAY_OF_MONTH, 1); for (int i = 0; i < 12; i++) { // 获取本月的起始日期 Date start = calendar.getTime(); // 获取下一个月的起始日期 calendar.add(Calendar.MONTH, 1); Date end = calendar.getTime(); // 输出本月的起始日期结束日期 System.out.println(start + " - " + end); } } } ``` 运行结果: ``` Wed Jan 01 00:00:00 CST 2020 - Fri Jan 31 23:59:59 CST 2020 Sat Feb 01 00:00:00 CST 2020 - Sun Mar 01 23:59:59 CST 2020 Mon Mar 02 00:00:00 CST 2020 - Tue Mar 31 23:59:59 CST 2020 Wed Apr 01 00:00:00 CST 2020 - Fri Apr 30 23:59:59 CST 2020 Sat May 01 00:00:00 CST 2020 - Mon May 31 23:59:59 CST 2020 Tue Jun 01 00:00:00 CST 2020 - Thu Jun 30 23:59:59 CST 2020 Fri Jul 01 00:00:00 CST 2020 - Sun Jul 31 23:59:59 CST 2020 Mon Aug 01 00:00:00 CST 2020 - Wed Aug 31 23:59:59 CST 2020 Thu Sep 01 00:00:00 CST 2020 - Sat Sep 30 23:59:59 CST 2020 Sun Oct 01 00:00:00 CST 2020 - Tue Oct 31 23:59:59 CST 2020 Wed Nov 01 00:00:00 CST 2020 - Fri Nov 30 23:59:59 CST 2020 Sat Dec 01 00:00:00 CST 2020 - Mon Dec 31 23:59:59 CST 2020 ``` 在这段代码中,我们使用了 Calendar 类的 set 方法将日期设置为今年 1 月 1 日,然后使用 add 方法添加一个月的时间,并使用 getTime 方法将日

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值