J2EE项目开发中好用的公共方法

Posted 为爱奔跑

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了J2EE项目开发中好用的公共方法相关的知识,希望对你有一定的参考价值。

  在项目IDCM中涉及到多种工单,包括有:服务器|网络设备上下架工单、服务器|网络设备重启工单、服务器光纤网线更换工单、网络设备撤线布线工单、服务器|网络设备替换工单、服务器|网络设备RMA工单、通用原子工单、硬盘消磁折弯工单、物流工单、资产初入门工单、机柜上下电工单、待盘点|待盘盈工单等等。工单管理系统中要涉及到工单的创建|API创建和维护。所以有必要将一些通用的方法提出来,类似于模块化的架构涉及。

目录:

  1. 日期工具类DateUtil.java提供日期计算的相关静态方法
  2. 接口调用工具类HttpClientUtil.java提供调用外部接口的公共方法
  3. 加密工具类GenMD5Util.java提供了将制定字符串加密成MD5的方法
  4. 公共方法抽象工具类CommonUtil.java提供了对工单表增删改查的公共方法
  5. 获取Bean实例工具类SpringContextUtil.java提供了根据bean id获取Bean实例的方法
  6. 实体Bean和JSON转换工具类JsonToBeanUtil.java提供了json和bean相互转换的方法
  7. 流程工具类FlowUtil.java提供了字符串转换和解析response的常用方法
  8. 文件上传工具类FileUpLoadUtil.java封装了上传的公共方法
  9. 工具类CookieUtil.java提供了常用的操纵缓存的方法
  10. 表格Excel转换实体Bean工具类ExcelUtil.java提供了文件导入导出的方法
  11. 复用$control.setTemplate("web:orderOptList.vm")实现日志记录
  12. JDK反射提供抽象参数类实现动态加载
  13. 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 的片段是不是是一种不好的形式?

如何在片段中使用按钮[关闭]

11SpringBoot-CRUD-thymeleaf公共页面元素抽取

VScode 好用插件集合

thymeleaf引入公共页面的某个片段

在android studio中升级repo v9后,片段必须是公共静态类崩溃错误