J2EE项目开发中好用的公共方法
Posted 为爱奔跑
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了J2EE项目开发中好用的公共方法相关的知识,希望对你有一定的参考价值。
在项目IDCM中涉及到多种工单,包括有:服务器|网络设备上下架工单、服务器|网络设备重启工单、服务器光纤网线更换工单、网络设备撤线布线工单、服务器|网络设备替换工单、服务器|网络设备RMA工单、通用原子工单、硬盘消磁折弯工单、物流工单、资产初入门工单、机柜上下电工单、待盘点|待盘盈工单等等。工单管理系统中要涉及到工单的创建|API创建和维护。所以有必要将一些通用的方法提出来,类似于模块化的架构涉及。
目录:
- 日期工具类DateUtil.java提供日期计算的相关静态方法
- 接口调用工具类HttpClientUtil.java提供调用外部接口的公共方法
- 加密工具类GenMD5Util.java提供了将制定字符串加密成MD5的方法
- 公共方法抽象工具类CommonUtil.java提供了对工单表增删改查的公共方法
- 获取Bean实例工具类SpringContextUtil.java提供了根据bean id获取Bean实例的方法
- 实体Bean和JSON转换工具类JsonToBeanUtil.java提供了json和bean相互转换的方法
- 流程工具类FlowUtil.java提供了字符串转换和解析response的常用方法
- 文件上传工具类FileUpLoadUtil.java封装了上传的公共方法
- 工具类CookieUtil.java提供了常用的操纵缓存的方法
- 表格Excel转换实体Bean工具类ExcelUtil.java提供了文件导入导出的方法
- 复用$control.setTemplate("web:orderOptList.vm")实现日志记录
- JDK反射提供抽象参数类实现动态加载
- api auth授权机制保证外部调用接口的安全性
1.日期工具类DateUtil.java提供了常用的日期计算方法,涉及SimpleDateFormat、Calendar、Date三个类,附上代码:
1 package com.alibaba.tboss.util; 2 3 import java.math.BigDecimal; 4 import java.text.DateFormat; 5 import java.text.SimpleDateFormat; 6 import java.util.Calendar; 7 import java.util.Date; 8 import java.util.GregorianCalendar; 9 import java.util.Locale; 10 11 import org.apache.commons.lang3.StringUtils; 12 13 import com.alibaba.common.lang.StringUtil; 14 import com.alibaba.nonda.json.ParseException; 15 16 public class DateUtil { 17 18 public static final String DATE_FORMAT = "yyyy-MM-dd"; 19 public static final String DATETIME_FORMAT = "yyyy-MM-dd HH:mm:ss"; 20 public static final String DATETIME = "yyyyMMddHHmmss"; 21 22 /** 23 * 计算两个日期之间相差的天数 24 * 25 * @param smdate 较小的时间 26 * @param bdate 较大的时间 27 * @return 相差天数 28 * @throws ParseException 29 * @throws Exception 30 */ 31 public static int daysBetween(Date smdate, Date bdate) { 32 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 33 try { 34 smdate = sdf.parse(sdf.format(smdate)); 35 bdate = sdf.parse(sdf.format(bdate)); 36 } catch (java.text.ParseException e) { 37 e.printStackTrace(); 38 } 39 Calendar cal = Calendar.getInstance(); 40 cal.setTime(smdate); 41 long time1 = cal.getTimeInMillis(); 42 cal.setTime(bdate); 43 long time2 = cal.getTimeInMillis(); 44 long between_days = (time2 - time1) / (1000 * 3600 * 24); 45 return new BigDecimal(String.valueOf(between_days)).abs().intValue(); 46 } 47 48 /** 49 * @description 将时间字符串转化为Date 50 * @author Anan 51 * @time 2013年7月26日 下午7:50:32 52 * @param time 时间字符串 53 * @param formatStr 时间格式 如"2013-7-26 19:52:47"、"2013-7-26" 54 * @return 55 */ 56 public static Date toDate(String time, String formatStr) { 57 Date date = null; 58 DateFormat dateFormat = new SimpleDateFormat(formatStr); 59 try { 60 date = dateFormat.parse(time); 61 } catch (java.text.ParseException e) { 62 e.printStackTrace(); 63 } 64 return date; 65 } 66 67 public static Date toDatebyday(String time, String formatStr) { 68 Date date = null; 69 DateFormat dateFormat = new SimpleDateFormat(formatStr, Locale.ENGLISH); 70 try { 71 date = dateFormat.parse(time); 72 } catch (java.text.ParseException e) { 73 e.printStackTrace(); 74 } 75 return date; 76 } 77 78 public static String toDatebydaytoString(String time, String formatStr) throws java.text.ParseException { 79 Date date = null; 80 String dateString = ""; 81 DateFormat dateFormat = new SimpleDateFormat(formatStr, Locale.ENGLISH); 82 83 date = dateFormat.parse(time); 84 dateString = formateDate(date); 85 86 return dateString; 87 } 88 89 public static Date toDatebytime(Date time, String formatStr) throws java.text.ParseException { 90 Date date = null; 91 String dateString = ""; 92 DateFormat dateFormat = new SimpleDateFormat(formatStr, Locale.ENGLISH); 93 94 dateString = formateDate(time); 95 date = toDate(dateString); 96 97 return date; 98 } 99 100 /** 101 * @description 将日期转化为字符串 102 * @author Anan 103 * @time 2013年7月30日 下午4:32:30 104 * @param date 105 * @param formatStr 106 * @return 107 */ 108 public static String toString(Date date, String formatStr) { 109 if (null == date || StringUtils.isBlank(formatStr)) return ""; 110 SimpleDateFormat sdf = new SimpleDateFormat(formatStr); 111 return sdf.format(date); 112 } 113 114 /** 115 * @description 将年月日转化为日期 116 * @author Anan 117 * @time 2013年7月30日 下午5:00:33 118 * @param year 119 * @param month 120 * @param day 121 * @return 122 * @throws java.text.ParseException 123 */ 124 public static Date toDate(int year, int month, int day) throws java.text.ParseException { 125 Date date = null; 126 Calendar calender = Calendar.getInstance(); 127 calender.set(Calendar.YEAR, year); 128 calender.set(Calendar.MONTH, month - 1); 129 calender.set(Calendar.DATE, day); 130 calender.set(Calendar.HOUR_OF_DAY, 0); 131 calender.set(Calendar.MINUTE, 0); 132 calender.set(Calendar.SECOND, 0); 133 date = calender.getTime(); 134 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 135 date = sdf.parse(sdf.format(date)); 136 return date; 137 } 138 139 /** 140 * @description 结束日期属于开始日期后的第几个月的日期 141 * @author Anan 142 * @time 2013年8月27日 下午10:00:33 143 * @param startDate 开始日期 144 * @param endDate 结束日期 145 * @return 146 */ 147 public static int monthsFromStartDate(Date startDate, Date endDate) { 148 int result = 0; 149 Date temp = null; 150 startDate = toDate(toString(startDate, "yyyy-MM-dd"), "yyyy-MM-dd"); 151 endDate = toDate(toString(endDate, "yyyy-MM-dd"), "yyyy-MM-dd"); 152 // 开始日期 大于 结束日期 两个日期互换 例如: startDate 2013-05-21 endDate = 2013-04-20 153 if (startDate.after(endDate)) { 154 temp = startDate; 155 startDate = endDate; 156 endDate = temp; 157 } 158 Date tempEndDate1 = null; 159 Date tempEndDate2 = null; 160 int a = getDayOfMonth(startDate); 161 int b = getDayOfMonth(endDate); 162 int c = a - b; 163 Calendar c1 = Calendar.getInstance(); 164 Calendar c2 = Calendar.getInstance(); 165 c1.setTime(startDate); 166 c2.setTime(endDate); 167 c2.set(Calendar.DAY_OF_MONTH, a); 168 tempEndDate2 = c2.getTime(); 169 int i = 0; 170 while (true) { 171 tempEndDate1 = addToMonth(startDate, i); 172 if (tempEndDate1.compareTo(tempEndDate2) == 0) { 173 result = i; 174 break; 175 } 176 i++; 177 if (i == 999999999) {// 防止死循环 178 break; 179 } 180 } 181 if (c < 0) { 182 result = result + 1; 183 } 184 return result; 185 } 186 187 /** 188 * 获取开始时间与结束时间之间间隔的月数 189 * 190 * @author yansong 191 * @param startDate 192 * @param endDate 193 * @return 194 */ 195 public static int monthsBetween(Date startDate, Date endDate) { 196 int iMonth = 0; 197 try { 198 Calendar objCalendarDateStart = Calendar.getInstance(); 199 objCalendarDateStart.setTime(startDate); 200 Calendar objCalendarDateEnd = Calendar.getInstance(); 201 objCalendarDateEnd.setTime(endDate); 202 if (objCalendarDateEnd.equals(objCalendarDateStart) || objCalendarDateStart.after(objCalendarDateEnd)) { 203 return 0; 204 } else { 205 if (objCalendarDateEnd.get(Calendar.YEAR) > objCalendarDateStart.get(Calendar.YEAR)) { 206 iMonth = (objCalendarDateEnd.get(Calendar.YEAR) - objCalendarDateStart.get(Calendar.YEAR)) * 12 207 + objCalendarDateEnd.get(Calendar.MONTH) - objCalendarDateStart.get(Calendar.MONTH); 208 } else { 209 iMonth = objCalendarDateEnd.get(Calendar.MONTH) - objCalendarDateStart.get(Calendar.MONTH); 210 } 211 } 212 213 } catch (Exception e) { 214 e.printStackTrace(); 215 } 216 return iMonth; 217 } 218 219 /** 220 * 获取输入日期所在月份的第一天 221 * 222 * @author yansong 223 * @param date 224 * @return 225 */ 226 public static Date getFristDateForCurrentMonth(Date date) { 227 Calendar cal = Calendar.getInstance(); 228 cal.setTime(date); 229 cal.set(GregorianCalendar.DAY_OF_MONTH, 1); 230 231 return cal.getTime(); 232 } 233 234 /** 235 * 获取输入日期所在月份的最后一天 236 * 237 * @author yansong 238 * @param date 239 * @return 240 */ 241 public static Date getLastDateForCurrentMonth(Date date) { 242 Calendar cal = Calendar.getInstance(); 243 cal.setTime(date); 244 245 cal.set(Calendar.DATE, 1); 246 cal.roll(Calendar.DATE, -1); 247 248 return cal.getTime(); 249 } 250 251 /** 252 * @description 获取某年某月的第一天 253 * @author Anan 254 * @time 2013年7月30日 下午4:27:53 255 * @param year 某年 256 * @param month 某月 257 * @return 258 */ 259 public static Date getMonthBegin(int year, int month) { 260 Date _month_begin = null; 261 Calendar calender = Calendar.getInstance(); 262 calender.set(Calendar.YEAR, year); 263 calender.set(Calendar.MONTH, month - 1); 264 calender.set(Calendar.DATE, 1);// 把日期设置为当月第一天 265 calender.set(Calendar.HOUR_OF_DAY, 0); 266 calender.set(Calendar.MINUTE, 0); 267 calender.set(Calendar.SECOND, 0); 268 _month_begin = calender.getTime(); 269 return _month_begin; 270 } 271 272 /** 273 * @description 获取某年某月的最后一天 274 * @author Anan 275 * @time 2013年7月30日 下午4:28:59 276 * @param year 某年 277 * @param month 某月 278 * @return 279 */ 280 public static Date getMonthEnd(int year, int month) { 281 Date month_end = null; 282 Calendar calender = Calendar.getInstance(); 283 calender.set(Calendar.YEAR, year); 284 calender.set(Calendar.MONTH, month - 1); 285 calender.set(Calendar.DATE, 1);// 把日期设置为当月第一天 286 calender.roll(Calendar.DATE, -1);// 日期回滚一天,也就是最后一天 287 calender.set(Calendar.HOUR_OF_DAY, 0); 288 calender.set(Calendar.MINUTE, 0); 289 calender.set(Calendar.SECOND, 0); 290 month_end = calender.getTime(); 291 return month_end; 292 } 293 294 /** 295 * @description 得到指定月的天数 296 * @author Anan 297 * @time 2013年7月30日 下午4:48:00 298 * @param year 某年 299 * @param month 某月 300 * @return 301 */ 302 public static int getMonthLastDay(int year, int month) { 303 Calendar calender = Calendar.getInstance(); 304 calender.set(Calendar.YEAR, year); 305 calender.set(Calendar.MONTH, month - 1); 306 calender.set(Calendar.DATE, 1);// 把日期设置为当月第一天 307 calender.roll(Calendar.DATE, -1);// 日期回滚一天,也就是最后一天 308 int maxDate = calender.get(Calendar.DATE); 309 return maxDate; 310 } 311 312 /** 313 * @description 得到当前日期月的天数 314 * @author Anan 315 * @time 2013年9月1日 下午1:01:44 316 * @param date 317 * @return 318 */ 319 public static int getMonthLastDay(Date date) { 320 Calendar calender = Calendar.getInstance(); 321 calender.setTime(date); 322 calender.set(Calendar.DATE, 1);// 把日期设置为当月第一天 323 calender.roll(Calendar.DATE, -1);// 日期回滚一天,也就是最后一天 324 int maxDate = calender.get(Calendar.DATE); 325 return maxDate; 326 } 327 328 /** 329 * @description 得到日期中的月份 330 * @author William 331 * @time 2013年10月24日 下午1:01:44 332 * @param date 333 * @return 334 */ 335 public static int getMonth(Date date) { 336 Calendar calendar = Calendar.getInstance(); 337 calendar.setTime(date); 338 return calendar.get(Calendar.MONTH); 339 } 340 341 /** 342 * @description 当月的第几天 343 * @author Anan 344 * @time 2013年8月22日 下午9:24:30 345 * @param date 346 * @return 347 */ 348 public static int getDayOfMonth(Date date) { 349 Calendar cal = Calendar.getInstance(); 350 cal.setTime(date); 351 return cal.get(Calendar.DAY_OF_MONTH); 352 } 353 354 /** 355 * @description 获得当前日期 + N个月 之后的日期 356 * @author Anan 357 * @time 2013年8月23日 上午12:26:53 358 * @param oldDate 359 * @param n 360 * @return 361 */ 362 public static Date addToMonth(Date oldDate, int n) { 363 Date newDate = null; 364 Calendar calOld = Calendar.getInstance(); 365 calOld.setTime(oldDate); 366 int month = calOld.get(Calendar.MONTH); 367 Calendar calNew = Calendar.getInstance(); 368 calNew.setTime(oldDate); 369 calNew.set(Calendar.MONTH, n + month); 370 newDate = calNew.getTime(); 371 return newDate; 372 } 373 374 将公共属性和方法公开给 Main Activity 的片段是不是是一种不好的形式?