DateUtils.java 6.0 KB

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