DataUtil.java 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588
  1. package cn.com.lzt.common.util;
  2. import groovy.time.BaseDuration.From;
  3. import java.io.IOException;
  4. import java.math.BigDecimal;
  5. import java.text.DecimalFormat;
  6. import java.text.ParseException;
  7. import java.text.SimpleDateFormat;
  8. import java.util.*;
  9. import org.apache.log4j.Logger;
  10. /**
  11. * 公共静态常量类
  12. *
  13. * @author zhaojiayan
  14. * @date 2017年8月12日下午12:00:46
  15. *
  16. */
  17. public class DataUtil {
  18. /**
  19. * 将数字保留两位小数
  20. * @param data
  21. * @return
  22. */
  23. public static String getFormatDecimailTwo(BigDecimal data) {
  24. if(data == null){
  25. return null;
  26. }else{
  27. DecimalFormat df = new DecimalFormat("#0.00");
  28. return df.format(data);
  29. }
  30. }
  31. /**
  32. * 获取某月的自然天数
  33. * @return
  34. */
  35. public static Integer getMonthDays(String yearmonth) {
  36. SimpleDateFormat format = new SimpleDateFormat("yyyy-MM");
  37. Calendar begincal = Calendar.getInstance();
  38. try {
  39. begincal.setTime(format.parse(yearmonth));
  40. } catch (ParseException e) {
  41. // TODO Auto-generated catch block
  42. e.printStackTrace();
  43. }
  44. return begincal.getActualMaximum(Calendar.DAY_OF_MONTH);
  45. }
  46. /**
  47. * 获取当前月的上一个月yyyy-MM
  48. * @return
  49. */
  50. public static String getBeforeMonth() {
  51. SimpleDateFormat format = new SimpleDateFormat("yyyy-MM");
  52. Calendar begincal = Calendar.getInstance();
  53. begincal.setTime(new Date());
  54. begincal.add(Calendar.MONTH, -1);
  55. String datestr = format.format(begincal.getTime());
  56. return datestr;
  57. }
  58. /**
  59. * 返回月初月未及上个月份信息
  60. * @param month
  61. * @return
  62. */
  63. public static Map<String,Object> getMonthInfo(String month) {
  64. Map<String,Object> params = new HashMap<String, Object>();
  65. SimpleDateFormat format = new SimpleDateFormat("yyyy-MM");
  66. SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");
  67. Calendar begincal = Calendar.getInstance();
  68. try {
  69. begincal.setTime(format.parse(month));
  70. begincal.set(Calendar.DAY_OF_MONTH, begincal.getActualMinimum(Calendar.DAY_OF_MONTH));
  71. params.put("earlymonth", format1.format(begincal.getTime()));
  72. begincal.set(Calendar.DAY_OF_MONTH, begincal.getActualMaximum(Calendar.DAY_OF_MONTH));
  73. params.put("endmonth", format1.format(begincal.getTime()));
  74. begincal.add(Calendar.MONTH, -1);
  75. params.put("beforemotn", format.format(begincal.getTime()));
  76. } catch (ParseException e) {
  77. // TODO Auto-generated catch block
  78. e.printStackTrace();
  79. }
  80. return params;
  81. }
  82. /**
  83. * 获取某个季度的年月
  84. * @param year
  85. * @param quarters
  86. * @return
  87. */
  88. public static List<String> getYearMonthList(String year,int quarters) {
  89. List<String> list = new ArrayList<String>();
  90. if(quarters == 1){
  91. list.add(year +"-01");
  92. list.add(year +"-02");
  93. list.add(year +"-03");
  94. }else if(quarters == 2){
  95. list.add(year +"-04");
  96. list.add(year +"-05");
  97. list.add(year +"-06");
  98. }else if(quarters == 3){
  99. list.add(year +"-07");
  100. list.add(year +"-08");
  101. list.add(year +"-09");
  102. }else if(quarters == 4){
  103. list.add(year +"-10");
  104. list.add(year +"-11");
  105. list.add(year +"-12");
  106. }
  107. return list;
  108. }
  109. /**
  110. * 获取月份集合
  111. * @Title: getMonList
  112. * @Description: TODO
  113. * @param @param begindate
  114. * @param @param enddate
  115. * @param @return
  116. * @return ArrayList<String>
  117. * @throws
  118. */
  119. public static ArrayList<String> getMonList(){
  120. ArrayList<String> dates = new ArrayList<String>();
  121. SimpleDateFormat format = new SimpleDateFormat("yyyy-MM");
  122. Date date = new Date();
  123. String begindate= date.getYear()+"-01-01";
  124. String enddate = date.getYear()+"-12-01";
  125. try {
  126. Calendar begincal = Calendar.getInstance();
  127. begincal.setTime(format.parse(begindate));
  128. Calendar endcal = Calendar.getInstance();
  129. endcal.setTime(format.parse(enddate));
  130. while(begincal.getTimeInMillis()<endcal.getTimeInMillis()){
  131. String d = format.format(begincal.getTime()).substring(5, 7);
  132. dates.add(d);
  133. begincal.add(Calendar.MONTH, 1);
  134. }
  135. dates.add(enddate.substring(4,6));
  136. } catch (Exception e) {
  137. e.printStackTrace();
  138. }
  139. return dates;
  140. }
  141. /**
  142. * 查询日期是否相差七天
  143. * @param date
  144. * @return
  145. */
  146. public static Boolean get7DateResult(Date date) {
  147. SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
  148. Calendar begincal = Calendar.getInstance();
  149. begincal.add(Calendar.DAY_OF_MONTH, 7);
  150. Calendar endcal = Calendar.getInstance();
  151. endcal.setTime(date);
  152. String begintime = format.format(begincal.getTime());
  153. String endtime = format.format(endcal.getTime());
  154. return begintime.equals(endtime);
  155. }
  156. /**
  157. * 获取当前时间
  158. * @return
  159. */
  160. public static String getCurDateString(Date date) {
  161. SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
  162. return format.format(date);
  163. }
  164. /**
  165. * 获得对象列表
  166. * @param <T>
  167. * @param colls
  168. * @return
  169. */
  170. public static <T> List<T> getList(Collection<T> colls){
  171. if(colls==null || colls.isEmpty())return Collections.emptyList();
  172. List<T> list = new ArrayList<T>(colls.size());
  173. for(T id:colls){
  174. list.add(id);
  175. }
  176. return list;
  177. }
  178. /**
  179. * 获得对象列表
  180. * @param <T>
  181. * @param ids
  182. * @return
  183. */
  184. public static <T> List<T> getList(T... ids) {
  185. if(ids==null || ids.length<1)return Collections.emptyList();
  186. List<T> list = new ArrayList<T>(ids.length);
  187. for (T id : ids) {
  188. list.add(id);
  189. }
  190. return list;
  191. }
  192. /**
  193. * 在原有基础上增加对象
  194. * @param <T>
  195. * @param list
  196. * @param ids
  197. * @return
  198. */
  199. public static <T> List<T> getList(List<T> list,T...ids){
  200. if(ids==null || ids.length<1)return list;
  201. List<T> resultList = new ArrayList<T>();
  202. resultList.addAll(list);
  203. for (T id : ids) {
  204. resultList.add(id);
  205. }
  206. return resultList;
  207. }
  208. /**
  209. * 获得Integer对象列表
  210. * @param ints
  211. * @return
  212. */
  213. public static List<Integer> getList(int... ints){
  214. List<Integer> list = new ArrayList<Integer>();
  215. for(int i:ints){
  216. list.add(i);
  217. }
  218. return list;
  219. }
  220. /**
  221. * 获得调用的方法名
  222. * @return
  223. */
  224. public static String getInvokeMethodName(){
  225. String methodName = null;
  226. try {
  227. Thread thr = Thread.currentThread();
  228. StackTraceElement[] ele = thr.getStackTrace();
  229. methodName = ele[ele.length>3?3:2].getMethodName();
  230. }
  231. catch (Exception e) {
  232. e.printStackTrace();
  233. }
  234. return methodName;
  235. }
  236. /**
  237. * 获得调用的类
  238. * @return
  239. */
  240. public static Class<?> getInvokeClass(){
  241. Class<?> clazz = null;
  242. try {
  243. Thread thr = Thread.currentThread();
  244. StackTraceElement[] ele = thr.getStackTrace();
  245. clazz = Class.forName(ele[ele.length>3?3:2].getClassName());
  246. }
  247. catch (Exception e) {
  248. e.printStackTrace();
  249. }
  250. return clazz;
  251. }
  252. /**
  253. * 打印调用的类链
  254. */
  255. public static void printStackInvokeClass(){
  256. try {
  257. Thread thr = Thread.currentThread();
  258. StackTraceElement[] ele = thr.getStackTrace();
  259. int index = 0 ;
  260. for(StackTraceElement ste:ele){
  261. if(index++>2){
  262. System.out.println(ste);
  263. }
  264. }
  265. }
  266. catch (Exception e) {
  267. e.printStackTrace();
  268. }
  269. }
  270. /**
  271. * 获得调用的类名
  272. * @return
  273. */
  274. public static String getInvokeClassName(){
  275. String clazzName = null;
  276. try {
  277. Thread thr = Thread.currentThread();
  278. StackTraceElement[] ele = thr.getStackTrace();
  279. clazzName = ele[ele.length>3?3:2].getClassName();
  280. }
  281. catch (Exception e) {
  282. e.printStackTrace();
  283. }
  284. return clazzName;
  285. }
  286. /**
  287. * 获得反转的list
  288. * @param <T>
  289. * @param list
  290. * @return
  291. */
  292. public static <T> List<T> getReversionList(List<T> list) {
  293. Stack<T> stack = new Stack<T>();
  294. for(T t : list){
  295. stack.push(t);
  296. }
  297. return getListFromStack(stack);
  298. }
  299. /**
  300. * 获得List :stack转list
  301. * @param <T>
  302. * @param stack
  303. * @return
  304. */
  305. public static <T> List<T> getListFromStack(Stack<T> stack){
  306. List<T> l = new ArrayList<T>();
  307. while(!stack.empty())l.add(stack.pop());
  308. return l;
  309. }
  310. /**
  311. * 获得int数组
  312. * @param strings
  313. * @return
  314. */
  315. public static int[] getIntArray(String...strings){
  316. if(strings==null || strings.length<1)return new int[]{};
  317. int[] array = new int[strings.length];
  318. for(int i=0;i<array.length;i++)
  319. array[i] = StringUtil.getInt(strings[i]);
  320. return array;
  321. }
  322. /**
  323. * 获得int数组
  324. * @return
  325. */
  326. public static int[] getIntArray(int...k) {
  327. return k;
  328. }
  329. /**
  330. * 返回String的Map格式:key,value,key,value
  331. * @param strings
  332. * @return
  333. */
  334. public static Map<String, String> getMap(String...strings) {
  335. if(strings==null || strings.length%2!=0)return Collections.emptyMap();
  336. Map<String,String> map = new LinkedHashMap<String,String>();
  337. for(int i=0;i<strings.length;i+=2){
  338. map.put(strings[i], strings[i+1]);
  339. }
  340. return map;
  341. }
  342. /**
  343. * 获得Integer数组
  344. * @param it
  345. * @return
  346. */
  347. public static Integer[] getIntegerArrayFromIterable(Iterable<?> it){
  348. if(it==null)return new Integer[0];
  349. List<Integer> list = new ArrayList<Integer>();
  350. for(Object obj : it){
  351. list.add(StringUtil.getInt(obj));
  352. }
  353. return list.toArray(new Integer[list.size()]);
  354. }
  355. /**
  356. * 获得Integer数组
  357. * @param strings
  358. * @return
  359. */
  360. public static Integer[] getIntegerArray(String...strings){
  361. if(strings==null)return new Integer[0];
  362. List<Integer> list = new ArrayList<Integer>();
  363. for(String str :strings)
  364. list.add(StringUtil.getInt(str));
  365. return list.toArray(new Integer[list.size()]);
  366. }
  367. /**
  368. * 获得列表中的某个索引,如果不存在返回null
  369. * @param <T>
  370. * @param list
  371. * @param index
  372. * @return
  373. */
  374. public static <T> T get(List<T> list , int index){
  375. if(list==null || list.size()<index-1)return null;
  376. return list.get(index);
  377. }
  378. /**
  379. * 获得按值排序的map
  380. * @param <K>
  381. * @param <V>
  382. * @param map
  383. * @param comparator 值排序器
  384. * @return
  385. */
  386. public static <K extends Object,V extends Comparable<?>> Map<K,V> getSortedByValueMap(final Map<K,V> map, Comparator<V> comparator) {
  387. if(map==null || map.isEmpty() || comparator==null)
  388. return map;
  389. Map<K,V> resultMap = new LinkedHashMap<K,V>();
  390. final List<V> values = new ArrayList<V>();
  391. values.addAll(map.values());
  392. Collections.sort( values, comparator);
  393. List<K> keys = new ArrayList<K>();
  394. keys.addAll(map.keySet());
  395. Collections.sort(keys,new Comparator<K>(){
  396. public int compare(K o1, K o2) {
  397. int index0 = values.indexOf(map.get(o1));
  398. int index1 = values.indexOf(map.get(o2));
  399. if(index0==index1)return 0;
  400. if(index0>index1)return 1;
  401. return -1;
  402. }
  403. });
  404. for(K k:keys){
  405. resultMap.put(k, map.get(k));
  406. }
  407. return resultMap;
  408. }
  409. /**
  410. * 获得非空选择对象
  411. * @param <T>
  412. * @param t
  413. * @param def
  414. * @return
  415. */
  416. public static <T> T getNonNull(T t,T def) {
  417. return t==null?def:t;
  418. }
  419. /**
  420. * 获得循环索引值
  421. * @param current 当前索引值
  422. * @param step 每步值
  423. * @param start 起始值
  424. * @param length 列表长度
  425. * @param zero 是否包含零
  426. * @return -1 为停止
  427. */
  428. public static int getCycleIndex(int current,int step,int start, int length, boolean zero){
  429. if(current == start-1) return -1;
  430. int index = current + step;
  431. boolean cycle = false;
  432. if(index>length || (zero && index >= length)){
  433. index = index - length;
  434. cycle = true;
  435. }
  436. if(cycle && index >= start)
  437. return -1;
  438. return index;
  439. }
  440. /**
  441. * 获得下一个循环索引,到边界重新开始
  442. * @param current
  443. * @param step
  444. * @param length
  445. * @param zero
  446. * @return
  447. */
  448. public static int getNextCycleIndex(int current, int step, int length ,boolean zero){
  449. if(length<0 || current>length) return -1;
  450. int index = current + step;
  451. if(index>length || (zero && index >= length)){
  452. index = index - length;
  453. }
  454. return index;
  455. }
  456. /**
  457. * 获得list0中有而list1中没有的对象列表
  458. * @param <T>
  459. * @param list0
  460. * @param list1
  461. * @return
  462. */
  463. public static <T extends Object> List<T> getExtList(List<T> list0,
  464. List<T> list1) {
  465. if(list1==null || list1.isEmpty())return list0;
  466. List<T> tList = new ArrayList<T>();
  467. if(list0!=null && !list0.isEmpty()){
  468. for(T t:list0){
  469. if(!list1.contains(t)){
  470. tList.add(t);
  471. }
  472. }
  473. }
  474. return tList;
  475. }
  476. /**
  477. * 动态调用方法
  478. * @param target
  479. * @param method
  480. * @param clazz
  481. * @param args
  482. * @return
  483. */
  484. public static Object getInvokeReturn(Object target,String method,Object...args){
  485. if(target==null) return null;
  486. try {
  487. args = ValidateUtil.isNullArray(args)?new Object[]{}:args;
  488. Class<?>[] clazz = new Class[args.length];
  489. for(int i=0,j=args.length;i<j;i++){
  490. clazz[i] = args[i].getClass();
  491. }
  492. return target.getClass().getMethod(method, clazz).invoke(target, ValidateUtil.isNullArray(args)?new Object[0]:args);
  493. } catch (Exception e) {
  494. throw new RuntimeException(e);
  495. }
  496. }
  497. /**
  498. * 动态调用类静态方法
  499. * @param class1
  500. * @param string
  501. * @param element
  502. * @return
  503. */
  504. public static Object getInvokeStaticReturn(
  505. Class<?> targetClazz,String method,Object... args) {
  506. try {
  507. args = ValidateUtil.isNullArray(args)?new Object[]{}:args;
  508. Class<?>[] clazz = new Class[args.length];
  509. for(int i=0,j=args.length;i<j;i++){
  510. clazz[i] = args[i].getClass();
  511. }
  512. return targetClazz.getMethod(method, clazz).invoke(targetClazz, ValidateUtil.isNullArray(args)?new Object[0]:args);
  513. } catch (Exception e) {
  514. throw new RuntimeException(e);
  515. }
  516. }
  517. /**
  518. * 获得泛型的对象,可以设置默认值
  519. * @param <T>
  520. * @param clazz
  521. * @param value
  522. * @param t
  523. * @return
  524. */
  525. @SuppressWarnings("unchecked")
  526. public static <T> T getEnumType(Class<T> clazz,String value, T t) {
  527. try{
  528. return (T) DataUtil.getInvokeStaticReturn(clazz, "valueOf", value);
  529. }catch(Exception e){
  530. return t;
  531. }
  532. }
  533. public static void main(String[] args) throws ParseException {
  534. System.out.println();
  535. }
  536. }