DateUtils.java 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. package com.kmall.common.utils;
  2. import org.apache.log4j.Logger;
  3. import org.springframework.util.StringUtils;
  4. import java.text.ParseException;
  5. import java.text.SimpleDateFormat;
  6. import java.util.Calendar;
  7. import java.util.Date;
  8. /**
  9. * 日期处理
  10. *
  11. * @author Scott
  12. * @email
  13. * @date 2016年12月21日 下午12:53:33
  14. */
  15. public class DateUtils {
  16. // 日志
  17. private static final Logger logger = Logger.getLogger(DateUtils.class);
  18. /**
  19. * 时间格式(yyyy-MM-dd)
  20. */
  21. public final static String DATE_PATTERN = "yyyy-MM-dd";
  22. public static String DATE_TIME_PATTERN_YYYY_MM_DD = "yyyyMMdd";
  23. /**
  24. * 无分隔符日期格式 "yyyyMMddHHmmss"
  25. */
  26. public static String DATE_TIME_PATTERN_YYYY_MM_DD_HH_MM_SS = "yyyyMMddHHmmss";
  27. /**
  28. * 无分隔符日期格式 "yyyyMMddHHmmssSSS"
  29. */
  30. public static String DATE_TIME_PATTERN_YYYY_MM_DD_HH_MM_SS_SSS = "yyyyMMddHHmmssSSS";
  31. /**
  32. * 不带秒的标准日期格式 "yyyy.MM.dd HH:mm"
  33. */
  34. public static String PATTERN_YYYY_MM_DD_HH_MM = "yyyy.MM.dd HH:mm";
  35. /**
  36. * 时间格式(yyyy-MM-dd HH:mm:ss)
  37. */
  38. public final static String DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss";
  39. // 日期转换格式数组
  40. public static String[][] regularExp = new String[][]{
  41. // 默认格式
  42. {"\\d{4}-((([0][1,3-9]|[1][0-2]|[1-9])-([0-2]\\d|[3][0,1]|[1-9]))|((02|2)-(([1-9])|[0-2]\\d)))\\s+([0,1]\\d|[2][0-3]|\\d):([0-5]\\d|\\d):([0-5]\\d|\\d)",
  43. DATE_TIME_PATTERN},
  44. // 仅日期格式 年月日 时 分 秒
  45. {"\\d{4}.((([0][1,3-9]|[1][0-2]|[1-9]).([0-2]\\d|[3][0,1]|[1-9]))|((02|2).(([1-9])|[0-2]\\d)))\\s+([0,1]\\d|[2][0-3]|\\d):([0-5]\\d|\\d)",
  46. PATTERN_YYYY_MM_DD_HH_MM},
  47. // 仅日期格式 年月日
  48. {"\\d{4}-((([0][1,3-9]|[1][0-2]|[1-9])-([0-2]\\d|[3][0,1]|[1-9]))|((02|2)-(([1-9])|[0-2]\\d)))",
  49. DATE_PATTERN},
  50. // 带毫秒格式
  51. {"\\d{4}((([0][1,3-9]|[1][0-2]|[1-9])([0-2]\\d|[3][0,1]|[1-9]))|((02|2)(([1-9])|[0-2]\\d)))([0,1]\\d|[2][0-3])([0-5]\\d|\\d)([0-5]\\d|\\d)\\d{1,3}",
  52. DATE_TIME_PATTERN_YYYY_MM_DD_HH_MM_SS_SSS}
  53. };
  54. public static String format(Date date) {
  55. return format(date, DATE_PATTERN);
  56. }
  57. public static String format(Date date, String pattern) {
  58. if (date != null) {
  59. SimpleDateFormat df = new SimpleDateFormat(pattern);
  60. return df.format(date);
  61. }
  62. return null;
  63. }
  64. public static String timeToStr(Long time, String pattern) {
  65. SimpleDateFormat dateFormat = new SimpleDateFormat(pattern);
  66. if (time.toString().length() < 13) {
  67. time = time * 1000L;
  68. }
  69. Date date = new Date(time);
  70. String value = dateFormat.format(date);
  71. return value;
  72. }
  73. public static long strToTime(String timeStr) {
  74. Date time = strToDate(timeStr);
  75. return time.getTime() / 1000;
  76. }
  77. /**
  78. * 获取过去的分钟
  79. *
  80. * @param date
  81. * @return
  82. */
  83. public static long pastMinutes(Date date) {
  84. long t = new Date().getTime() - date.getTime();
  85. return t / (60 * 1000);
  86. }
  87. /**
  88. * 转换为时间类型格式
  89. *
  90. * @param strDate 日期
  91. * @return
  92. */
  93. public static Date strToDate(String strDate) {
  94. try {
  95. String strType = getDateFormat(strDate);
  96. SimpleDateFormat sf = new SimpleDateFormat(strType);
  97. return new Date((sf.parse(strDate).getTime()));
  98. } catch (Exception e) {
  99. return null;
  100. }
  101. }
  102. /**
  103. * 根据传入的日期格式字符串,获取日期的格式
  104. *
  105. * @return 秒
  106. */
  107. public static String getDateFormat(String date_str) {
  108. String style = null;
  109. if (StringUtils.isEmpty(date_str)) {
  110. return null;
  111. }
  112. boolean b = false;
  113. for (int i = 0; i < regularExp.length; i++) {
  114. b = date_str.matches(regularExp[i][0]);
  115. if (b) {
  116. style = regularExp[i][1];
  117. }
  118. }
  119. if (StringUtils.isEmpty(style)) {
  120. logger.info("date_str:" + date_str);
  121. logger.info("日期格式获取出错,未识别的日期格式");
  122. }
  123. return style;
  124. }
  125. /**
  126. * 将字符串类型的转换成Date类型
  127. *
  128. * @param dateStr 字符串类型的日期 yyyy-MM-dd
  129. * @return Date类型的日期
  130. * @throws ParseException
  131. */
  132. public static Date convertStringToDate(String dateStr,String format) {
  133. // 返回的日期
  134. Date resultDate = null;
  135. try {
  136. // 日期格式转换
  137. SimpleDateFormat sdf = new SimpleDateFormat(format);
  138. resultDate = sdf.parse(dateStr);
  139. } catch (ParseException e) {
  140. e.printStackTrace();
  141. }
  142. return resultDate;
  143. }
  144. /**
  145. * 获取月份的开始和结束时间
  146. *
  147. * @param time
  148. */
  149. public static Date[] getMonthStartEnd(Date time) {
  150. Date[] startEndDate = new Date[2];
  151. // 获取当前月第一天
  152. Calendar cal = Calendar.getInstance();// 获取当前日期
  153. cal.setTime(time);
  154. cal.set(Calendar.DAY_OF_MONTH, 1);// 设置为1号,当前日期既为本月第一天
  155. cal.set(Calendar.HOUR_OF_DAY, 0);
  156. cal.set(Calendar.MINUTE, 0);
  157. cal.set(Calendar.SECOND, 0);
  158. cal.set(Calendar.MILLISECOND, 0);
  159. startEndDate[0] = cal.getTime();
  160. cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
  161. cal.set(Calendar.HOUR_OF_DAY, 23);
  162. cal.set(Calendar.MINUTE, 59);
  163. cal.set(Calendar.SECOND, 59);
  164. cal.set(Calendar.MILLISECOND, 999);
  165. startEndDate[1] = cal.getTime();
  166. return startEndDate;
  167. }
  168. public static void main(String[] args) {
  169. Date date = new Date();
  170. String str = "20170818223629599";
  171. System.out.println(DateUtils.getDateFormat(str));
  172. }
  173. }