DateUtils.java 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. package com.sqx.common.utils;
  2. import cn.hutool.core.util.StrUtil;
  3. import com.sqx.modules.datacentre.query.DataCenterQuery;
  4. import org.apache.commons.lang.StringUtils;
  5. import org.joda.time.DateTime;
  6. import org.joda.time.LocalDate;
  7. import org.joda.time.format.DateTimeFormat;
  8. import org.joda.time.format.DateTimeFormatter;
  9. import java.text.SimpleDateFormat;
  10. import java.time.temporal.TemporalAdjusters;
  11. import java.util.Date;
  12. /**
  13. * 日期处理
  14. *
  15. */
  16. public class DateUtils {
  17. /** 时间格式(yyyy-MM-dd) */
  18. public final static String DATE_PATTERN = "yyyy-MM-dd";
  19. /** 时间格式(yyyy-MM-dd HH:mm:ss) */
  20. public final static String DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss";
  21. public final static String TIME_PATTERN1 = "HH:mm";
  22. /**
  23. * 日期格式化 日期格式为:yyyy-MM-dd
  24. * @param date 日期
  25. * @return 返回yyyy-MM-dd格式日期
  26. */
  27. public static String format(Date date) {
  28. return format(date, DATE_TIME_PATTERN);
  29. }
  30. /**
  31. * 日期格式化 日期格式为:yyyy-MM-dd
  32. * @param date 日期
  33. * @param pattern 格式,如:DateUtils.DATE_TIME_PATTERN
  34. * @return 返回yyyy-MM-dd格式日期
  35. */
  36. public static String format(Date date, String pattern) {
  37. if(date != null){
  38. SimpleDateFormat df = new SimpleDateFormat(pattern);
  39. return df.format(date);
  40. }
  41. return null;
  42. }
  43. /**
  44. * 字符串转换成日期
  45. * @param strDate 日期字符串
  46. * @param pattern 日期的格式,如:DateUtils.DATE_TIME_PATTERN
  47. */
  48. public static Date stringToDate(String strDate, String pattern) {
  49. if (StringUtils.isBlank(strDate)){
  50. return null;
  51. }
  52. DateTimeFormatter fmt = DateTimeFormat.forPattern(pattern);
  53. return fmt.parseLocalDateTime(strDate).toDate();
  54. }
  55. /**
  56. * 根据周数,获取开始日期、结束日期
  57. * @param week 周期 0本周,-1上周,-2上上周,1下周,2下下周
  58. * @return 返回date[0]开始日期、date[1]结束日期
  59. */
  60. public static Date[] getWeekStartAndEnd(int week) {
  61. DateTime dateTime = new DateTime();
  62. LocalDate date = new LocalDate(dateTime.plusWeeks(week));
  63. date = date.dayOfWeek().withMinimumValue();
  64. Date beginDate = date.toDate();
  65. Date endDate = date.plusDays(6).toDate();
  66. return new Date[]{beginDate, endDate};
  67. }
  68. /**
  69. * 对日期的【秒】进行加/减
  70. *
  71. * @param date 日期
  72. * @param seconds 秒数,负数为减
  73. * @return 加/减几秒后的日期
  74. */
  75. public static Date addDateSeconds(Date date, int seconds) {
  76. DateTime dateTime = new DateTime(date);
  77. return dateTime.plusSeconds(seconds).toDate();
  78. }
  79. /**
  80. * 对日期的【分钟】进行加/减
  81. *
  82. * @param date 日期
  83. * @param minutes 分钟数,负数为减
  84. * @return 加/减几分钟后的日期
  85. */
  86. public static Date addDateMinutes(Date date, int minutes) {
  87. DateTime dateTime = new DateTime(date);
  88. return dateTime.plusMinutes(minutes).toDate();
  89. }
  90. /**
  91. * 对日期的【小时】进行加/减
  92. *
  93. * @param date 日期
  94. * @param hours 小时数,负数为减
  95. * @return 加/减几小时后的日期
  96. */
  97. public static Date addDateHours(Date date, int hours) {
  98. DateTime dateTime = new DateTime(date);
  99. return dateTime.plusHours(hours).toDate();
  100. }
  101. /**
  102. * 对日期的【天】进行加/减
  103. *
  104. * @param date 日期
  105. * @param days 天数,负数为减
  106. * @return 加/减几天后的日期
  107. */
  108. public static Date addDateDays(Date date, int days) {
  109. DateTime dateTime = new DateTime(date);
  110. return dateTime.plusDays(days).toDate();
  111. }
  112. /**
  113. * 对日期的【天】进行加/减返回格式化日期
  114. *
  115. * @param date
  116. * @param days 天数,负数为减
  117. * @param format 日期格式
  118. * @return 加/减几天后的日期String 日期格式为:yyyy-MM-dd
  119. */
  120. public static String addDateDaysString(Date date, int days,String format) {
  121. return format(addDateDays(date,days),format);
  122. }
  123. /**
  124. * 对日期的【周】进行加/减
  125. *
  126. * @param date 日期
  127. * @param weeks 周数,负数为减
  128. * @return 加/减几周后的日期
  129. */
  130. public static Date addDateWeeks(Date date, int weeks) {
  131. DateTime dateTime = new DateTime(date);
  132. return dateTime.plusWeeks(weeks).toDate();
  133. }
  134. /**
  135. * 对日期的【月】进行加/减
  136. *
  137. * @param date 日期
  138. * @param months 月数,负数为减
  139. * @return 加/减几月后的日期
  140. */
  141. public static Date addDateMonths(Date date, int months) {
  142. DateTime dateTime = new DateTime(date);
  143. return dateTime.plusMonths(months).toDate();
  144. }
  145. /**
  146. * 对日期的【年】进行加/减
  147. *
  148. * @param date 日期
  149. * @param years 年数,负数为减
  150. * @return 加/减几年后的日期
  151. */
  152. public static Date addDateYears(Date date, int years) {
  153. DateTime dateTime = new DateTime(date);
  154. return dateTime.plusYears(years).toDate();
  155. }
  156. /**
  157. * 获取str日期的当天/当月/当年的结束时间
  158. *数据中心用
  159. */
  160. public static DataCenterQuery dateStrEndTime(DataCenterQuery query) {
  161. if (StrUtil.isNotBlank(query.getDate())) {
  162. java.time.LocalDate queryDate = java.time.LocalDate.parse(query.getDate());
  163. if (StrUtil.equals("year", query.getDateType())) {
  164. java.time.LocalDate firstDayOfYear = queryDate.with(TemporalAdjusters.firstDayOfYear());
  165. java.time.LocalDate endDayOfYear = firstDayOfYear.plusYears(1).minusDays(1);
  166. query.setStartTime(firstDayOfYear + " 00:00:00");
  167. query.setEndTime(endDayOfYear + " 23:59:59");
  168. } else if (StrUtil.equals("month", query.getDateType())) {
  169. java.time.LocalDate firstDayOfMonth = queryDate.with(TemporalAdjusters.firstDayOfMonth());
  170. java.time.LocalDate endDayOfMonth = firstDayOfMonth.plusMonths(1).minusDays(1);
  171. query.setStartTime(firstDayOfMonth + " 00:00:00");
  172. query.setEndTime(endDayOfMonth + " 23:59:59");
  173. } else if (StrUtil.equals("day", query.getDateType())) {
  174. query.setStartTime(queryDate + " 00:00:00");
  175. query.setEndTime(queryDate + " 23:59:59");
  176. }
  177. }
  178. return query;
  179. }
  180. /**
  181. * 获取str日期的当天/当月/当年的结束时间
  182. *数据中心用
  183. */
  184. public static String dateStrEndTime(String dateStr,String dateType) {
  185. if ("day".equals(dateType)){
  186. Date day= DateUtils.stringToDate(dateStr.substring(0,10),"yyyy-MM-dd");
  187. return format(addDateDays(day,1));
  188. }else if ("month".equals(dateType)){
  189. Date day= DateUtils.stringToDate(dateStr.substring(0,7),"yyyy-MM");
  190. return format(addDateMonths(day,1));
  191. }else if ("year".equals(dateType)){
  192. Date day= DateUtils.stringToDate(dateStr.substring(0,4),"yyyy");
  193. return format(addDateYears(day,1));
  194. }
  195. return dateStr;
  196. }
  197. }