`
xixian
  • 浏览: 215400 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

日期范围转为正则表达式

    博客分类:
  • java
阅读更多
在日期控件My97DatePicker里可以按正则表达式屏蔽对应日期
下面这么繁琐的代码就是两个日期范围间转换为对应正则表达式的方法
例如
2011-06-02和2011-07-12
转换后为
2011-06-0[2-9],2011-06-[1-3],2011-07-[0],2011-07-1[0-2]

public String DateToReg(Date startDate,Date endDate){
		Calendar   calendar   =   Calendar.getInstance(); 
		calendar.setTime(startDate);
		int startyear =calendar.get(Calendar.YEAR); 
		int startmonth=calendar.get(Calendar.MONTH)+1; 
		String startmonthStr=String.valueOf(startmonth);
		if(startmonth<10)startmonthStr="0"+startmonth;
		int startday=calendar.get(Calendar.DATE);
		calendar.setTime(endDate);
		int endyear =calendar.get(Calendar.YEAR); 
		int endmonth=calendar.get(Calendar.MONTH)+1; 
		String endmonthStr=String.valueOf(endmonth);
		if(endmonth<10)endmonthStr="0"+endmonth;
		int endday=calendar.get(Calendar.DATE); 
		StringBuffer sb=new StringBuffer();
		if(endyear-startyear>0){//跨年情况,获得月份正则表达式	
			if(startmonth<9){
				sb.append("\"");
				sb.append(startyear);
				sb.append("-0[");
				sb.append(startmonth+1);
				sb.append("-9]\",");
				sb.append("\"");
				sb.append(startyear);
				sb.append("-1[0-2]\",");
			}
			else if(startmonth!=12){
				sb.append("\"");
				sb.append(startyear);
				sb.append("-1[");
				sb.append(startmonth%10+1);
				sb.append("-2]\",");
			}
			if(1< endmonth&&endmonth<11){
				sb.append("\"");
				sb.append(endyear);
				sb.append("-0[1-");
				sb.append(endmonth-1);
				sb.append("]\",");
			}else if(endmonth!=1){
				sb.append("\"");
				sb.append(endyear);
				sb.append("-[0-9]");
				sb.append("\",\"");
				sb.append(endyear);
				sb.append("-1[0-");
				sb.append(endmonth%10-1);
				sb.append("]\",");
			}
			sb.append(differentMonthDayReg(startyear,startmonthStr,startday,endyear,endmonthStr,endday));
		}
		else{//不跨年情况,获得月份正则表达式
			if(endmonth-startmonth>1){//相隔了两个月以上
				if(endmonth<11){
					sb.append("\"");
					sb.append(startyear);
					sb.append("-");
				sb.append("0[");	
				sb.append(startmonth+1);
				sb.append("-");
				sb.append(endmonth-1);
				sb.append("]\",");
				}else if(startmonth>8){
					sb.append("\"");
					sb.append(startyear);
					sb.append("-");
					sb.append("1[");	
					sb.append((startmonth+1)%10);
					sb.append("-");
					sb.append(endmonth%10-1);
					sb.append("]\",");
				}
				else {
					sb.append("\"");
					sb.append(startyear);
					sb.append("-0[");
					sb.append(startmonth+1);
					sb.append("-9]\",\"");
						sb.append(startyear);
						sb.append("-1[0-");
						sb.append(endmonth%10-1);
						sb.append("]\",");	            
				}
				sb.append(differentMonthDayReg(startyear,startmonthStr,startday,endyear,endmonthStr,endday));
			}else if(endmonth-startmonth==1){//只隔了一个月情况
				sb.append(differentMonthDayReg(startyear,startmonthStr,startday,endyear,endmonthStr,endday));
			}else {//同一个月的情况
				if(endday/10-startday/10>1){
					sb.append("\"");
		        	sb.append(startyear); 
		        	sb.append("-"); 
		        	sb.append(startmonthStr); 
		        	sb.append("-[");
		        	sb.append(startday/10+1); 
		        	sb.append("-");
		        	sb.append(endday/10-1); 
		        	sb.append("]\",\"");
		        	sb.append(startyear);
		        	sb.append("-"); 
		        	sb.append(startmonthStr); 
		        	sb.append("-");
		        	sb.append(startday/10); 
		        	sb.append("[");
		        	sb.append(startday%10);
		        	sb.append("-9]\",\"");
		        	sb.append(endyear);
		        	sb.append("-"); 
		        	sb.append(endmonthStr); 
		        	sb.append("-");
		        	sb.append(endday/10); 
		        	sb.append("[0-");
		        	sb.append(endday%10);
		        	sb.append("]\"");
				}else if(endday/10-startday/10==1){
		        	sb.append("\"");
		        	sb.append(startyear);
		        	sb.append("-"); 
		        	sb.append(startmonthStr); 
		        	sb.append("-");
		        	sb.append(startday/10); 
		        	sb.append("[");
		        	sb.append(startday%10);
		        	sb.append("-9]\",\"");
		        	sb.append(endyear);
		        	sb.append("-"); 
		        	sb.append(endmonthStr); 
		        	sb.append("-");
		        	sb.append(endday/10); 
		        	sb.append("[0-");
		        	sb.append(endday%10);
		        	sb.append("]\"");
				}else{
					sb.append("\"");
		        	sb.append(startyear);
		        	sb.append("-"); 
		        	sb.append(startmonthStr); 
		        	sb.append("-");
		        	sb.append(startday/10); 
		        	sb.append("[");
		        	sb.append(startday%10);
		        	sb.append("-");
		        	sb.append(endday%10);
		        	sb.append("]\"");
				}
			}
			
		}

		return sb.toString();	
	}
	
	public String differentMonthDayReg(int startyear,String startmonthStr,int startday,int endyear,String endmonthStr,int endday){

		StringBuffer sb=new StringBuffer();
        if(startday/10<3){
        	sb.append("\"");
        	sb.append(startyear); 
        	sb.append("-"); 
        	sb.append(startmonthStr); 
        	sb.append("-[");
        	sb.append(startday/10+1); 
        	sb.append("-3]\",\"");
        	sb.append(startyear); 
        	sb.append("-"); 
        	sb.append(startmonthStr); 
        	sb.append("-");
        	sb.append(startday/10); 
        	sb.append("[");
        	sb.append(startday%10); 
        	sb.append("-9]\",");       	
        }
        else {
        	sb.append("\"");
        	sb.append(startyear); 
        	sb.append("-"); 
        	sb.append(startmonthStr); 
        	sb.append("-3[");
        	sb.append(startday%10); 
        	sb.append("-1]\",");
        }
        if(endday/10>0){
        	sb.append("\"");
        	sb.append(endyear); 
        	sb.append("-"); 
        	sb.append(endmonthStr); 
        	sb.append("-[0-");
        	sb.append(endday/10-1); 
        	sb.append("]\",");
        	sb.append("\"");
        	sb.append(endyear); 
        	sb.append("-"); 
        	sb.append(endmonthStr);
        	sb.append("-");
        	sb.append(endday/10); 
        	sb.append("[0-");
        	sb.append(endday%10); 
        	sb.append("]\"");
        }
        else {
        	sb.append("\"");
        	sb.append(endyear);
        	sb.append("-"); 
        	sb.append(endmonthStr);
        	sb.append("-");
        	sb.append(endday/10); 
        	sb.append("[0-");
        	sb.append(endday%10); 
        	sb.append("]\"");
        }
		return sb.toString();
	}
	 
分享到:
评论

相关推荐

    javascript将字符串类型转换成日期进行比较

    为了将其转换为可以进行比较的日期对象,我们需要使用正则表达式来匹配和替换这些数字串。 ```javascript function dateValid() { var bd = document.getElementById("sStartSaveDate").value; // 使用正则表达式...

    详解AngularJS验证、过滤器、指令

    - `ng-pattern`: 使用正则表达式定义输入内容的格式。 - `ng-change`: 当输入值变化时触发的函数。 - `ng-trim`: 是否自动去除输入内容两端的空白字符。 在上面的示例中,我们创建了一个包含用户名和密码的表单,两...

    28个java常用的工具类

    6. **正则表达式工具类**:如`RegexUtils`,提供正则表达式的匹配、替换等操作,`matches()`可以判断字符串是否符合某个正则表达式,`replaceAll()`用于替换匹配到的部分。 7. **反射工具类**:例如`...

    Oracle函数大全

    本文档将详细介绍Oracle 11g中的一些常用函数,包括字符串函数、正则表达式函数、数字函数、转换函数以及日期函数等,帮助用户更好地理解和掌握这些函数的应用场景。 #### 二、字符串函数 1. **ASCII(s)**:此函数...

    C# Extension(扩展方法)

    // 使用正则表达式验证电子邮件地址格式 } } ``` 3. ** 数字格式化扩展 **: ```csharp public static class NumberExtensions { public static string ToCurrency(this decimal value) { return value....

    sql高级进阶

    - 按照给定的时间单位进行查找:根据指定时间单位(年、月、日等)进行日期范围查询。 - 使用日期的特殊部分比较记录:使用日期函数进行记录比较。 - 识别重叠的日期范围:使用数据库窗口函数或逻辑判断来识别...

    千万级的mysql数据库与优化方法分享.pdf

    8. **日期操作**:避免使用`DATEDIFF()`进行日期比较,改用直接的日期范围比较。 9. **索引顺序**:复合索引的使用要确保在查询中使用到的第一个字段是索引的第一个字段,以充分利用索引。 10. **避免不必要的查询...

    php相关面试题,面试题

    - 对于整个单词首字母大写,可以先用`strtolower()`转为小写,再用`str_replace()`配合正则表达式替换下划线后每个单词的首字母为大写。 4. **数组转换**: - 这个问题涉及到数组的嵌套和重组。可以通过循环遍历`...

    从实践中学习oracleSQL读书笔记

    16. **转义字符**:`\`用于转义特殊字符,`~`有时用于正则表达式。 17. **排序(ORDER BY子句)**:`ORDER BY`用于对查询结果进行排序,必须置于SQL语句最后。可以指定列名、别名、表达式或列号,多列排序需指定每...

    C#基础类库

    32.正则表达式 RegexHelper 33.字符串 StringHelper 34.其它 BasePage BindDataControl ConvertHelper DataCache FormulaExpress GridViewHelper IpHelper MediaHandler PageValidate PicDeal QueryString Rmb ...

    SuperNotepad

    23) 正则表达式处理字符 例︰"\b([a-z]+) \1\b"合并多次重复单词 24) 可设置字符内部编码 (注:分Unicdoe和ANSI两种;[设置]-&gt;[设置字符编码类型]中设定) 6.计算功能支持函数清单: (注:num 表示数字; "" ...

    168 道2019年最新的Python面试题,让你最短时间内掌握核心点.pdf

    1. **Python标准库**:Python有许多内置的库,如`os`用于操作系统接口,`sys`用于系统交互,`re`用于正则表达式,`json`用于JSON数据处理,`datetime`用于日期和时间操作。 2. **内建数据类型**:Python的内建数据...

    C#基类库(苏飞版)

    32.正则表达式 RegexHelper 33.字符串 StringHelper 34.其它 BasePage BindDataControl ConvertHelper DataCache FormulaExpress GridViewHelper IpHelper MediaHandler PageValidate PicDeal QueryString Rmb ...

    JAVA面试题全集

    - 字符串替换可以通过 `replace` 方法或正则表达式实现。 3. **数据类型之间的转换** - 将数值型字符转换为数字:可以使用 `Integer.parseInt()` 或 `Double.parseDouble()`。 - 将数字转换为字符:可以使用 `...

    1345个易语言模块

    1345个易语言模块,易语言模块大集合,够你用的啦 1亦思验证码识别1.5免费版.ec 24位转单色位图模块.ec 32张发牌.ec 3D引擎支持库-eOgre.ec 69msn.ec ACCESS 到高级表格.ec Access操作.ec Access数据库压缩修复新建....

    精易模块[源码] V5.15

    12、新增“时间_WMI时间转日期”把WMI数据时间转换成日期时间型,如“20140926001639.000000+480”。 13、修正“类_系统信息”重写该类,在部分系统下不兼容及闪退问题,感谢易友【@longfeng0008】反馈。 14、改善...

    1350多个精品易语言模块

    1350多个精品易语言模块提供下载介绍 1亦思验证码识别1.5免费版.ec 24位转单色位图模块.ec 32张发牌.ec 3D引擎支持库-eOgre.ec 69msn.ec ACCESS 到高级表格.ec Access操作.ec Access数据库压缩修复新建.ec ...

    你必须知道的495个C语言问题

    3.7 是否可以安全地认为,一旦&&和||左边的表达式已经决定了整个表达式的结果,则右边的表达式不会被求值? 3.8 为什么表达式printf("%d%d",f1(),f2());先调用了f2?我觉得逗号表达式应该确保从左到右的求值顺序...

    C语言FAQ 常见问题列表

    o 4.4 这是个巧妙的表达式: a ^= b ^= a ^= b 它不需要临时变量就可以交换 a 和 b 的值。 o 4.5 我可否用括号来强制执行我所需要的计算顺序? o 4.6 可是 && 和 || 运算符呢?我看到过类似 while((c = getchar())...

Global site tag (gtag.js) - Google Analytics