DateUtils2.java 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. package cn.cslg.pas.common.utils;
  2. import cn.hutool.core.date.DateUtil;
  3. import org.joda.time.DateTime;
  4. import org.joda.time.format.DateTimeFormat;
  5. import org.joda.time.format.DateTimeFormatter;
  6. import org.slf4j.Logger;
  7. import org.slf4j.LoggerFactory;
  8. import java.lang.management.ManagementFactory;
  9. import java.text.ParseException;
  10. import java.text.SimpleDateFormat;
  11. import java.util.*;
  12. import java.util.regex.Pattern;
  13. import static cn.cslg.pas.common.utils.DateUtils.FORMAT_STRING;
  14. public class DateUtils2 {
  15. public static DateTime formStrToDateTime(String dateString) {
  16. try {
  17. DateTimeFormatter formatter;
  18. if (dateString.contains("-")) {
  19. formatter = DateTimeFormat.forPattern("yyyy-MM-dd");
  20. } else if (dateString.contains("//")) {
  21. formatter = DateTimeFormat.forPattern("yyyy/MM/dd");
  22. } else if (dateString.contains(":")) {
  23. formatter = DateTimeFormat.forPattern("yyyy:MM:dd");
  24. } else if (dateString.contains(".")) {
  25. formatter = DateTimeFormat.forPattern("yyyy.MM.dd");
  26. } else {
  27. formatter = DateTimeFormat.forPattern("yyyyMMdd");
  28. }
  29. return formatter.parseDateTime(dateString);
  30. } catch (Exception e) {
  31. throw new RuntimeException("时间转化格式错误" + "[dateString=" + dateString + "]" + "[FORMAT_STRING=" + FORMAT_STRING + "]");
  32. }
  33. }
  34. public static List<DateTime> formStrToDateTime(DateTime dateStart, DateTime dateEnd) {
  35. List<DateTime> dateTimes = new ArrayList<>();
  36. dateTimes.add(dateStart);
  37. DateTime minDate1 = new DateTime();
  38. DateTime minDate2= new DateTime();
  39. Integer startYear = dateStart.getYear();
  40. Integer startMonth = dateStart.getMonthOfYear();
  41. Integer startDay = dateStart.getDayOfYear();
  42. Integer endYear = dateEnd.getYear();
  43. Integer endMonth = dateEnd.getMonthOfYear();
  44. Integer endDay = dateEnd.getDayOfYear();
  45. if (startYear.equals(endYear) ) {
  46. if (startMonth.equals(endMonth)) {
  47. if (startDay .equals(endDay) ) {
  48. minDate1=dateStart;
  49. } else {
  50. int diffDay = endDay - startDay;
  51. int minDay = diffDay / 2;
  52. minDate1 = dateStart.plusDays(minDay);
  53. }
  54. } else {
  55. int diffMonth = endYear - startYear;
  56. int minMonth = diffMonth / 2;
  57. if(minMonth==0){
  58. minMonth=1;
  59. }
  60. minDate1 = dateStart.plusMonths(minMonth).minusDays(1);
  61. minDate2 =dateStart.plusMonths(minMonth);
  62. }
  63. } else {
  64. int diffYear = endYear - startYear;
  65. int minYear = diffYear / 2;
  66. if(minYear==0){
  67. minYear=1;
  68. }
  69. minDate1 = dateStart.plusYears(minYear).minusDays(1);
  70. minDate2 =dateStart.plusYears(minYear);
  71. if(minDate1.isAfter(minDate2)){
  72. System.out.println("aa");
  73. }
  74. }
  75. dateTimes.add(minDate1);
  76. dateTimes.add(minDate2);
  77. dateTimes.add(dateEnd);
  78. return dateTimes;
  79. }
  80. public static String dateTimeToPatentStr(Date dateTime) {
  81. SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
  82. return format.format(dateTime);
  83. }
  84. public static Date formStrToDate(String dateString) {
  85. try {
  86. if(dateString==null||dateString.trim().equals("")){
  87. return null;
  88. }
  89. SimpleDateFormat formatter;
  90. if (dateString.contains("-")) {
  91. formatter = new SimpleDateFormat("yyyy-MM-dd");
  92. } else if (dateString.contains("//")) {
  93. formatter = new SimpleDateFormat("yyyy/MM/dd");
  94. } else if (dateString.contains(":")) {
  95. formatter = new SimpleDateFormat("yyyy:MM:dd");
  96. } else if (dateString.contains(".")) {
  97. formatter = new SimpleDateFormat("yyyy.MM.dd");
  98. } else {
  99. formatter = new SimpleDateFormat("yyyyMMdd");
  100. }
  101. return formatter.parse(dateString);
  102. } catch (Exception e) {
  103. throw new RuntimeException("时间转化格式错误" + "[dateString=" + dateString + "]" + "[FORMAT_STRING=" + FORMAT_STRING + "]");
  104. }
  105. }
  106. /**
  107. * 获取第几个星期
  108. *
  109. * @param date
  110. * @return
  111. */
  112. public static int getDateWeekIndex(Date date) {
  113. Calendar calendar = Calendar.getInstance(Locale.getDefault());
  114. calendar.setTime(date); // 注意月份是从0开始的,即0=1月,1=2月,...
  115. // 获取周数可能依赖于Calendar的设置,这里使用默认设置
  116. int weekOfYear = calendar.get(Calendar.WEEK_OF_YEAR);
  117. return weekOfYear;
  118. }
  119. /**
  120. * 获取第几个月
  121. *
  122. * @param date
  123. * @return
  124. */
  125. public static int getDateMonthIndex(Date date) {
  126. Calendar calendar = Calendar.getInstance(Locale.getDefault());
  127. calendar.setTime(date); // 注意月份是从0开始的,即0=1月,1=2月,...
  128. // 获取周数可能依赖于Calendar的设置,这里使用默认设置
  129. int month = calendar.get(Calendar.MONTH) + 1;
  130. return month;
  131. }
  132. /**
  133. * 获取第几个季度
  134. *
  135. * @param date
  136. * @return
  137. */
  138. public static int getDateQuarterIndex(Date date) {
  139. Calendar calendar = Calendar.getInstance(Locale.getDefault());
  140. calendar.setTime(date); // 注意月份是从0开始的,即0=1月,1=2月,...
  141. // 获取周数可能依赖于Calendar的设置,这里使用默认设置
  142. int month = calendar.get(Calendar.MONTH) + 1;
  143. int quarter;
  144. if (month >= Calendar.JANUARY && month <= Calendar.MARCH) {
  145. quarter = 1;
  146. } else if (month >= Calendar.APRIL && month <= Calendar.JUNE) {
  147. quarter = 2;
  148. } else if (month >= Calendar.JULY && month <= Calendar.SEPTEMBER) {
  149. quarter = 3;
  150. } else {
  151. quarter = 4;
  152. }
  153. return quarter;
  154. }
  155. public static int getDateYear(Date date) {
  156. Calendar calendar = Calendar.getInstance(Locale.getDefault());
  157. calendar.setTime(date); // 注意月份是从0开始的,即0=1月,1=2月,...
  158. // 获取周数可能依赖于Calendar的设置,这里使用默认设置
  159. int year = calendar.get(Calendar.YEAR);
  160. return year;
  161. }
  162. public static String getDateIndexStr(Date date, String type) {
  163. StringBuilder dateStr = new StringBuilder();
  164. int year = DateUtils2.getDateYear(date);
  165. dateStr.append(year+"年");
  166. switch (type) {
  167. case "week":
  168. int week = DateUtils2.getDateWeekIndex(date);
  169. dateStr.append("第" + week + "周");
  170. break;
  171. case "month":
  172. int month = DateUtils2.getDateMonthIndex(date);
  173. dateStr.append( month + "月");
  174. break;
  175. case "quarter":
  176. int quarter = DateUtils2.getDateQuarterIndex(date);
  177. dateStr.append("第" + quarter + "季度");
  178. break;
  179. }
  180. String reDate = dateStr.toString();
  181. return reDate;
  182. }
  183. }