Commit eeacdfb1ce3a475c6a741bf2e420ec1438bfa8e0

Authored by 张志伟
1 parent d00e711b

:boom: feat(*): 优化代码

- 优化代码
fw-hestia-common/src/main/java/cn/fw/hestia/common/utils/CoordinateTransformUtil.kt
1   -package cn.fw.hestia.common.utils;
  1 +package cn.fw.hestia.common.utils
2 2  
3   -import lombok.AccessLevel;
4   -import lombok.NoArgsConstructor;
  3 +import kotlin.math.*
5 4  
6 5 /**
7 6 * 百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系之间的转换的工具
8   - * <p>
  7 + *
  8 + *
9 9 * create at 2018-10-09
10 10 *
11 11 * @author kurisu
12 12 */
13   -@NoArgsConstructor(access = AccessLevel.PRIVATE)
14   -public final class CoordinateTransformUtil {
15   -
  13 +object CoordinateTransformUtil {
16 14 // π
17   - private static double PI = Math.PI;
18   - private static double X_PI = PI * 3000.0 / 180.0;
  15 + private const val PI = Math.PI
  16 + private const val X_PI = PI * 3000.0 / 180.0
  17 +
19 18 // 长半轴
20   - private static double A = 6378245.0;
  19 + private const val A = 6378245.0
  20 +
21 21 // 扁率
22   - private static double EE = 0.00669342162296594323;
  22 + private const val EE = 0.006693421622965943
23 23  
24 24 /**
25 25 * 百度坐标系(BD-09)转WGS坐标
... ... @@ -28,9 +28,9 @@ public final class CoordinateTransformUtil {
28 28 * @param lat 百度坐标经度
29 29 * @return WGS84坐标数组
30 30 */
31   - public static double[] bd09toWgs84(double lng, double lat) {
32   - double[] gcj = bd09toGcj02(lng, lat);
33   - return gcj02toWgs84(gcj[0], gcj[1]);
  31 + fun bd09toWgs84(lng: Double, lat: Double): DoubleArray {
  32 + val gcj = bd09toGcj02(lng, lat)
  33 + return gcj02toWgs84(gcj[0], gcj[1])
34 34 }
35 35  
36 36 /**
... ... @@ -40,9 +40,9 @@ public final class CoordinateTransformUtil {
40 40 * @param lat WGS84坐标系的纬度
41 41 * @return 百度坐标数组
42 42 */
43   - public static double[] wgs84toBd09(double lng, double lat) {
44   - double[] gcj = wgs84toGcj02(lng, lat);
45   - return gcj02toBd09(gcj[0], gcj[1]);
  43 + fun wgs84toBd09(lng: Double, lat: Double): DoubleArray {
  44 + val gcj = wgs84toGcj02(lng, lat)
  45 + return gcj02toBd09(gcj[0], gcj[1])
46 46 }
47 47  
48 48 /**
... ... @@ -53,12 +53,12 @@ public final class CoordinateTransformUtil {
53 53 * @param lat 火星坐标纬度
54 54 * @return 百度坐标数组
55 55 */
56   - public static double[] gcj02toBd09(double lng, double lat) {
57   - double z = Math.sqrt(lng * lng + lat * lat) + 0.00002 * Math.sin(lat * X_PI);
58   - double theta = Math.atan2(lat, lng) + 0.000003 * Math.cos(lng * X_PI);
59   - double bd_lng = z * Math.cos(theta) + 0.0065;
60   - double bd_lat = z * Math.sin(theta) + 0.006;
61   - return new double[]{bd_lng, bd_lat};
  56 + fun gcj02toBd09(lng: Double, lat: Double): DoubleArray {
  57 + val z = sqrt(lng * lng + lat * lat) + 0.00002 * sin(lat * X_PI)
  58 + val theta = atan2(lat, lng) + 0.000003 * cos(lng * X_PI)
  59 + val bd_lng = z * cos(theta) + 0.0065
  60 + val bd_lat = z * sin(theta) + 0.006
  61 + return doubleArrayOf(bd_lng, bd_lat)
62 62 }
63 63  
64 64 /**
... ... @@ -69,14 +69,14 @@ public final class CoordinateTransformUtil {
69 69 * @param bd_lat 百度坐标经度
70 70 * @return 火星坐标数组
71 71 */
72   - public static double[] bd09toGcj02(double bd_lon, double bd_lat) {
73   - double x = bd_lon - 0.0065;
74   - double y = bd_lat - 0.006;
75   - double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * X_PI);
76   - double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * X_PI);
77   - double gg_lng = z * Math.cos(theta);
78   - double gg_lat = z * Math.sin(theta);
79   - return new double[]{gg_lng, gg_lat};
  72 + fun bd09toGcj02(bd_lon: Double, bd_lat: Double): DoubleArray {
  73 + val x = bd_lon - 0.0065
  74 + val y = bd_lat - 0.006
  75 + val z = sqrt(x * x + y * y) - 0.00002 * sin(y * X_PI)
  76 + val theta = atan2(y, x) - 0.000003 * cos(x * X_PI)
  77 + val gg_lng = z * cos(theta)
  78 + val gg_lat = z * sin(theta)
  79 + return doubleArrayOf(gg_lng, gg_lat)
80 80 }
81 81  
82 82 /**
... ... @@ -86,21 +86,22 @@ public final class CoordinateTransformUtil {
86 86 * @param lat WGS84坐标系的纬度
87 87 * @return 火星坐标数组
88 88 */
89   - public static double[] wgs84toGcj02(double lng, double lat) {
  89 + fun wgs84toGcj02(lng: Double, lat: Double): DoubleArray {
90 90 if (out_of_china(lng, lat)) {
91   - return new double[]{lng, lat};
  91 + return doubleArrayOf(lng, lat)
92 92 }
93   - double dlat = transformLat(lng - 105.0, lat - 35.0);
94   - double dlng = transformLng(lng - 105.0, lat - 35.0);
95   - double radlat = lat / 180.0 * PI;
96   - double magic = Math.sin(radlat);
97   - magic = 1 - EE * magic * magic;
98   - double sqrtmagic = Math.sqrt(magic);
99   - dlat = (dlat * 180.0) / ((A * (1 - EE)) / (magic * sqrtmagic) * PI);
100   - dlng = (dlng * 180.0) / (A / sqrtmagic * Math.cos(radlat) * PI);
101   - double mglat = lat + dlat;
102   - double mglng = lng + dlng;
103   - return new double[]{mglng, mglat};
  93 + var dlat = transformLat(lng - 105.0, lat - 35.0)
  94 + var dlng = transformLng(lng - 105.0, lat - 35.0)
  95 + val radlat = lat / 180.0 * PI
  96 + var magic = sin(radlat)
  97 + magic = 1 - EE * magic * magic
  98 + val sqrtmagic = sqrt(magic)
  99 + dlat =
  100 + (dlat * 180.0) / ((A * (1 - EE)) / (magic * sqrtmagic) * PI)
  101 + dlng = (dlng * 180.0) / (A / sqrtmagic * cos(radlat) * PI)
  102 + val mglat = lat + dlat
  103 + val mglng = lng + dlng
  104 + return doubleArrayOf(mglng, mglat)
104 105 }
105 106  
106 107 /**
... ... @@ -110,21 +111,22 @@ public final class CoordinateTransformUtil {
110 111 * @param lat 火星坐标系纬度
111 112 * @return WGS84坐标数组
112 113 */
113   - public static double[] gcj02toWgs84(double lng, double lat) {
  114 + fun gcj02toWgs84(lng: Double, lat: Double): DoubleArray {
114 115 if (out_of_china(lng, lat)) {
115   - return new double[]{lng, lat};
  116 + return doubleArrayOf(lng, lat)
116 117 }
117   - double dlat = transformLat(lng - 105.0, lat - 35.0);
118   - double dlng = transformLng(lng - 105.0, lat - 35.0);
119   - double radlat = lat / 180.0 * PI;
120   - double magic = Math.sin(radlat);
121   - magic = 1 - EE * magic * magic;
122   - double sqrtmagic = Math.sqrt(magic);
123   - dlat = (dlat * 180.0) / ((A * (1 - EE)) / (magic * sqrtmagic) * PI);
124   - dlng = (dlng * 180.0) / (A / sqrtmagic * Math.cos(radlat) * PI);
125   - double mglat = lat + dlat;
126   - double mglng = lng + dlng;
127   - return new double[]{lng * 2 - mglng, lat * 2 - mglat};
  118 + var dlat = transformLat(lng - 105.0, lat - 35.0)
  119 + var dlng = transformLng(lng - 105.0, lat - 35.0)
  120 + val radlat = lat / 180.0 * PI
  121 + var magic = sin(radlat)
  122 + magic = 1 - EE * magic * magic
  123 + val sqrtmagic = sqrt(magic)
  124 + dlat =
  125 + (dlat * 180.0) / ((A * (1 - EE)) / (magic * sqrtmagic) * PI)
  126 + dlng = (dlng * 180.0) / (A / sqrtmagic * cos(radlat) * PI)
  127 + val mglat = lat + dlat
  128 + val mglng = lng + dlng
  129 + return doubleArrayOf(lng * 2 - mglng, lat * 2 - mglat)
128 130 }
129 131  
130 132 /**
... ... @@ -134,12 +136,14 @@ public final class CoordinateTransformUtil {
134 136 * @param lat 纬度
135 137 * @return 纬度
136 138 */
137   - public static double transformLat(double lng, double lat) {
138   - double ret = -100.0 + 2.0 * lng + 3.0 * lat + 0.2 * lat * lat + 0.1 * lng * lat + 0.2 * Math.sqrt(Math.abs(lng));
139   - ret += (20.0 * Math.sin(6.0 * lng * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0 / 3.0;
140   - ret += (20.0 * Math.sin(lat * PI) + 40.0 * Math.sin(lat / 3.0 * PI)) * 2.0 / 3.0;
141   - ret += (160.0 * Math.sin(lat / 12.0 * PI) + 320 * Math.sin(lat * PI / 30.0)) * 2.0 / 3.0;
142   - return ret;
  139 + fun transformLat(lng: Double, lat: Double): Double {
  140 + var ret = -100.0 + 2.0 * lng + 3.0 * lat + 0.2 * lat * lat + 0.1 * lng * lat + 0.2 * sqrt(
  141 + abs(lng)
  142 + )
  143 + ret += (20.0 * sin(6.0 * lng * PI) + 20.0 * sin(2.0 * lng * PI)) * 2.0 / 3.0
  144 + ret += (20.0 * sin(lat * PI) + 40.0 * sin(lat / 3.0 * PI)) * 2.0 / 3.0
  145 + ret += (160.0 * sin(lat / 12.0 * PI) + 320 * sin(lat * PI / 30.0)) * 2.0 / 3.0
  146 + return ret
143 147 }
144 148  
145 149 /**
... ... @@ -149,12 +153,13 @@ public final class CoordinateTransformUtil {
149 153 * @param lat 纬度
150 154 * @return 经度
151 155 */
152   - public static double transformLng(double lng, double lat) {
153   - double ret = 300.0 + lng + 2.0 * lat + 0.1 * lng * lng + 0.1 * lng * lat + 0.1 * Math.sqrt(Math.abs(lng));
154   - ret += (20.0 * Math.sin(6.0 * lng * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0 / 3.0;
155   - ret += (20.0 * Math.sin(lng * PI) + 40.0 * Math.sin(lng / 3.0 * PI)) * 2.0 / 3.0;
156   - ret += (150.0 * Math.sin(lng / 12.0 * PI) + 300.0 * Math.sin(lng / 30.0 * PI)) * 2.0 / 3.0;
157   - return ret;
  156 + fun transformLng(lng: Double, lat: Double): Double {
  157 + var ret =
  158 + 300.0 + lng + 2.0 * lat + 0.1 * lng * lng + 0.1 * lng * lat + 0.1 * sqrt(abs(lng))
  159 + ret += (20.0 * sin(6.0 * lng * PI) + 20.0 * sin(2.0 * lng * PI)) * 2.0 / 3.0
  160 + ret += (20.0 * sin(lng * PI) + 40.0 * sin(lng / 3.0 * PI)) * 2.0 / 3.0
  161 + ret += (150.0 * sin(lng / 12.0 * PI) + 300.0 * sin(lng / 30.0 * PI)) * 2.0 / 3.0
  162 + return ret
158 163 }
159 164  
160 165 /**
... ... @@ -164,12 +169,11 @@ public final class CoordinateTransformUtil {
164 169 * @param lat 纬度
165 170 * @return 是否
166 171 */
167   - public static boolean out_of_china(double lng, double lat) {
168   - if (lng < 72.004 || lng > 137.8347) {
169   - return true;
  172 + fun out_of_china(lng: Double, lat: Double): Boolean {
  173 + return if (lng < 72.004 || lng > 137.8347) {
  174 + true
170 175 } else {
171   - return lat < 0.8293 || lat > 55.8271;
  176 + lat < 0.8293 || lat > 55.8271
172 177 }
173 178 }
174   -
175   -}
  179 +}
176 180 \ No newline at end of file
... ...
fw-hestia-common/src/main/java/cn/fw/hestia/common/utils/DateUtil.kt
1   -package cn.fw.hestia.common.utils;
  1 +package cn.fw.hestia.common.utils
2 2  
3   -import java.sql.Timestamp;
4   -import java.text.ParseException;
5   -import java.text.SimpleDateFormat;
6   -import java.time.*;
7   -import java.time.temporal.TemporalAdjusters;
8   -import java.util.Calendar;
9   -import java.util.Date;
10   -import java.util.Objects;
  3 +import org.slf4j.Logger
  4 +import org.slf4j.LoggerFactory
  5 +import java.sql.Timestamp
  6 +import java.text.SimpleDateFormat
  7 +import java.time.*
  8 +import java.time.temporal.TemporalAdjusters
  9 +import java.util.*
11 10  
12 11 /**
13 12 * 日期处理工具
14   - * <p>
  13 + *
  14 + *
15 15 *
16 16 * @author kurisu
17 17 */
18   -public final class DateUtil {
19   -
20   - private final static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
21   -
22   - /**
23   - * 默认构造器
24   - */
25   - private DateUtil() {
26   - throw new UnsupportedOperationException();
27   - }
28 18  
29   -
30   - public static Date parse(String date) {
  19 +object DateUtil {
  20 + private val sdf: SimpleDateFormat = SimpleDateFormat("yyyy-MM-dd")
  21 + private val log: Logger = LoggerFactory.getLogger(this::class.java)
  22 + fun parse(date: String?): Date? {
31 23 try {
32   - return sdf.parse(date);
33   - } catch (Exception e) {
34   - e.printStackTrace();
  24 + return sdf.parse(date)
  25 + } catch (e: Exception) {
  26 + log.error("解析失败", e)
35 27 }
36   - return null;
  28 + return null
37 29 }
38 30  
39 31 /**
40 32 * 开始日期处理
41 33 */
42   - public static Date startDate(final Date date) {
43   - if (date == null) {
44   - return null;
  34 + fun startDate(date: Date?): Date? {
  35 + return date?.also {
  36 + localDateTime2Date(
  37 + date2LocalDate(it)?.atStartOfDay()
  38 + )
45 39 }
46   - return localDateTime2Date(date2LocalDate(date).atStartOfDay());
47 40 }
48 41  
49 42 /**
50 43 * 最结束日期处理
51 44 */
52   - public static Date endDate(final Date date) {
  45 + fun endDate(date: Date?): Date? {
53 46 if (date == null) {
54   - return null;
  47 + return null
55 48 }
56   - return localDateTime2Date(date2LocalDate(date).plusDays(1).atStartOfDay());
  49 + return localDateTime2Date(
  50 + date2LocalDate(date)?.plusDays(1)?.atStartOfDay()
  51 + )
57 52 }
58 53  
59 54 /**
60 55 * 处理日期,保留年月日
61 56 */
62   - public static LocalDate date2LocalDate(final Date date) {
  57 + fun date2LocalDate(date: Date?): LocalDate? {
63 58 if (date == null) {
64   - return null;
  59 + return null
65 60 }
66   - return LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault()).toLocalDate();
  61 + return LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault()).toLocalDate()
67 62 }
68 63  
69   - public static LocalTime date2LocalTime(final Date date) {
  64 + fun date2LocalTime(date: Date?): LocalTime? {
70 65 if (date == null) {
71   - return null;
  66 + return null
72 67 }
73   - return LocalTime.of(date.getHours(), date.getMinutes(), date.getSeconds());
  68 + return LocalTime.of(date.hours, date.minutes, date.seconds)
74 69 }
75 70  
76   - public static LocalDateTime date2LocalDateTime(final Date date) {
77   - Instant instant = date.toInstant();
78   - ZoneId zoneId = ZoneId.systemDefault();
79   - return instant.atZone(zoneId).toLocalDateTime();
  71 + fun date2LocalDateTime(date: Date): LocalDateTime {
  72 + val instant: Instant = date.toInstant()
  73 + val zoneId: ZoneId = ZoneId.systemDefault()
  74 + return instant.atZone(zoneId).toLocalDateTime()
80 75 }
81 76  
82 77 /**
83 78 * convert LocalDateTime to Date
84 79 */
85   - public static Date localDateTime2Date(final LocalDateTime dateTime) {
86   - return Date.from(dateTime.atZone(ZoneId.systemDefault()).toInstant());
  80 + fun localDateTime2Date(dateTime: LocalDateTime?): Date? {
  81 + return dateTime?.let {
  82 + Date.from(it.atZone(ZoneId.systemDefault()).toInstant())
  83 + }
87 84 }
88 85  
89 86 /**
90 87 * convert LocalDate to Date
91 88 */
92   - public static Date localDate2Date(final LocalDate localDate) {
  89 + fun localDate2Date(localDate: LocalDate?): Date? {
93 90 if (localDate == null) {
94   - return null;
  91 + return null
95 92 }
96   - return Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
  93 + return Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant())
97 94 }
98 95  
99   - public static Date getBeginInTime(Date inTime) {
  96 + fun getBeginInTime(inTime: Date?): Date? {
100 97 if (inTime == null) {
101   - return null;
  98 + return null
102 99 }
103   - Calendar c = Calendar.getInstance();
104   - c.setTime(inTime);
105   - c.set(Calendar.HOUR_OF_DAY, 0);
106   - c.set(Calendar.MINUTE, 0);
107   - c.set(Calendar.SECOND, 0);
108   - return c.getTime();
  100 + val c: Calendar = Calendar.getInstance()
  101 + c.time = inTime
  102 + c.set(Calendar.HOUR_OF_DAY, 0)
  103 + c.set(Calendar.MINUTE, 0)
  104 + c.set(Calendar.SECOND, 0)
  105 + return c.time
109 106 }
110 107  
111   - public static Date getEndInTime(Date inTime) {
  108 + fun getEndInTime(inTime: Date?): Date? {
112 109 if (inTime == null) {
113   - return null;
  110 + return null
114 111 }
115   - Calendar c = Calendar.getInstance();
116   - c.setTime(inTime);
117   - c.set(Calendar.HOUR_OF_DAY, 23);
118   - c.set(Calendar.MINUTE, 59);
119   - c.set(Calendar.SECOND, 59);
120   - return c.getTime();
  112 + val c: Calendar = Calendar.getInstance()
  113 + c.time = inTime
  114 + c.set(Calendar.HOUR_OF_DAY, 23)
  115 + c.set(Calendar.MINUTE, 59)
  116 + c.set(Calendar.SECOND, 59)
  117 + return c.time
121 118 }
122 119  
123 120 /**
... ... @@ -125,15 +122,15 @@ public final class DateUtil {
125 122 *
126 123 * @return
127 124 */
128   - public static Date getMondayOfThisWeek(Date inTime) {
129   - Calendar c = Calendar.getInstance();
130   - c.setTime(inTime);
131   - int day_of_week = c.get(Calendar.DAY_OF_WEEK) - 1;
  125 + fun getMondayOfThisWeek(inTime: Date?): Date {
  126 + val c: Calendar = Calendar.getInstance()
  127 + c.time = inTime
  128 + var day_of_week: Int = c.get(Calendar.DAY_OF_WEEK) - 1
132 129 if (day_of_week == 0) {
133   - day_of_week = 7;
  130 + day_of_week = 7
134 131 }
135   - c.add(Calendar.DATE, -day_of_week + 1);
136   - return c.getTime();
  132 + c.add(Calendar.DATE, -day_of_week + 1)
  133 + return c.time
137 134 }
138 135  
139 136 /**
... ... @@ -141,15 +138,15 @@ public final class DateUtil {
141 138 *
142 139 * @return
143 140 */
144   - public static Date getSundayOfThisWeek(Date inTime) {
145   - Calendar c = Calendar.getInstance();
146   - c.setTime(inTime);
147   - int day_of_week = c.get(Calendar.DAY_OF_WEEK) - 1;
  141 + fun getSundayOfThisWeek(inTime: Date?): Date {
  142 + val c: Calendar = Calendar.getInstance()
  143 + c.time = inTime
  144 + var day_of_week: Int = c.get(Calendar.DAY_OF_WEEK) - 1
148 145 if (day_of_week == 0) {
149   - day_of_week = 7;
  146 + day_of_week = 7
150 147 }
151   - c.add(Calendar.DATE, -day_of_week + 7);
152   - return c.getTime();
  148 + c.add(Calendar.DATE, -day_of_week + 7)
  149 + return c.time
153 150 }
154 151  
155 152 /**
... ... @@ -157,60 +154,63 @@ public final class DateUtil {
157 154 *
158 155 * @return
159 156 */
160   - public static Date getMonthFirstDay(Date inTime) {
161   - Calendar c = Calendar.getInstance();
162   - c.setTime(inTime);
163   - c.add(Calendar.MONTH, 0);
164   - c.set(Calendar.DAY_OF_MONTH, 1);
165   - return c.getTime();
  157 + fun getMonthFirstDay(inTime: Date?): Date {
  158 + val c: Calendar = Calendar.getInstance()
  159 + c.time = inTime
  160 + c.add(Calendar.MONTH, 0)
  161 + c.set(Calendar.DAY_OF_MONTH, 1)
  162 + return c.time
166 163 }
167 164  
168   - /**
169   - * 获取当月月初时间
170   - */
171   - public static Date getMonthFirstDay() {
172   - return DateUtil.localDate2Date(LocalDateTime.now()
173   - .with(TemporalAdjusters.firstDayOfMonth()).toLocalDate());
174   - }
  165 + val monthFirstDay: Date?
  166 + /**
  167 + * 获取当月月初时间
  168 + */
  169 + get() = localDate2Date(
  170 + LocalDateTime.now()
  171 + .with(TemporalAdjusters.firstDayOfMonth()).toLocalDate()
  172 + )
175 173  
176 174 /**
177 175 * 得到月末
178 176 *
179 177 * @return
180 178 */
181   - public static Date getMonthEndDay(Date inTime) {
182   - Calendar c = Calendar.getInstance();
183   - c.setTime(inTime);
184   - c.add(Calendar.MONTH, 1);
185   - c.set(Calendar.DAY_OF_MONTH, 0);
186   - return c.getTime();
187   - }
188   -
189   - /**
190   - * 得到月末
191   - *
192   - * @return
193   - */
194   - public static Date getMonthEndDay() {
195   - return DateUtil.localDate2Date(LocalDateTime.now()
196   - .with(TemporalAdjusters.lastDayOfMonth()).toLocalDate());
197   - }
  179 + fun getMonthEndDay(inTime: Date?): Date {
  180 + val c: Calendar = Calendar.getInstance()
  181 + c.time = inTime
  182 + c.add(Calendar.MONTH, 1)
  183 + c.set(Calendar.DAY_OF_MONTH, 0)
  184 + return c.time
  185 + }
  186 +
  187 + val monthEndDay: Date?
  188 + /**
  189 + * 得到月末
  190 + *
  191 + * @return
  192 + */
  193 + get() {
  194 + return localDate2Date(
  195 + LocalDateTime.now()
  196 + .with(TemporalAdjusters.lastDayOfMonth()).toLocalDate()
  197 + )
  198 + }
198 199  
199 200 /**
200 201 * 得到年初
201 202 *
202 203 * @return
203 204 */
204   - public static Date getYearFirstDay(Date inTime) {
205   - Calendar c = Calendar.getInstance();
206   - c.setTime(inTime);
207   - int x = c.get(Calendar.YEAR);
  205 + fun getYearFirstDay(inTime: Date?): Date? {
  206 + val c: Calendar = Calendar.getInstance()
  207 + c.time = inTime
  208 + val x: Int = c.get(Calendar.YEAR)
208 209 try {
209   - return sdf.parse(x + "-01" + "-01");
210   - } catch (Exception e) {
211   -
  210 + return sdf.parse("$x-01-01")
  211 + } catch (e: Exception) {
212 212 }
213   - return null;
  213 + return null
214 214 }
215 215  
216 216 /**
... ... @@ -218,61 +218,66 @@ public final class DateUtil {
218 218 *
219 219 * @return
220 220 */
221   - public static Date getYearEndDay(Date inTime) {
222   - Calendar c = Calendar.getInstance();
223   - c.setTime(inTime);
224   - int x = c.get(Calendar.YEAR);
  221 + fun getYearEndDay(inTime: Date?): Date? {
  222 + val c: Calendar = Calendar.getInstance()
  223 + c.time = inTime
  224 + val x: Int = c.get(Calendar.YEAR)
225 225 try {
226   - return sdf.parse(x + "-12" + "-31");
227   - } catch (Exception e) {
228   -
  226 + return sdf.parse("$x-12-31")
  227 + } catch (e: Exception) {
  228 + }
  229 + return null
  230 + }
  231 +
  232 + fun getThisHourStartTime(time: Date): Date {
  233 + val thisHourStart: LocalDateTime = LocalDateTime.of(
  234 + date2LocalDateTime(time).year,
  235 + date2LocalDateTime(time).month,
  236 + date2LocalDateTime(time).dayOfMonth,
  237 + date2LocalDateTime(time).hour,
  238 + 0, 0
  239 + )
  240 + return localDateTime2Date(thisHourStart)!!
  241 + }
  242 +
  243 + fun getThisHourEndTime(time: Date): Date {
  244 + val thisHourEnd: LocalDateTime = LocalDateTime.of(
  245 + date2LocalDateTime(time).year,
  246 + date2LocalDateTime(time).month,
  247 + date2LocalDateTime(time).dayOfMonth,
  248 + date2LocalDateTime(time).hour,
  249 + 59, 59
  250 + )
  251 + return localDateTime2Date(thisHourEnd)!!
  252 + }
  253 +
  254 + val currentDayStartTime: Date
  255 + /**
  256 + * 获取当天起始时间
  257 + *
  258 + * @return 当天起始时间
  259 + */
  260 + get() {
  261 + val now: LocalDateTime = LocalDateTime.now()
  262 + val start: LocalDateTime = LocalDateTime.of(now.year, now.month, now.dayOfMonth, 0, 0, 0)
  263 + val zone: ZoneId = ZoneId.systemDefault()
  264 + val instant: Instant = start.atZone(zone).toInstant()
  265 + return Date.from(instant)
229 266 }
230   - return null;
231   - }
232   -
233   - public static Date getThisHourStartTime(Date time) {
234   - final LocalDateTime thisHourStart = LocalDateTime.of(DateUtil.date2LocalDateTime(time).getYear(),
235   - DateUtil.date2LocalDateTime(time).getMonth(),
236   - DateUtil.date2LocalDateTime(time).getDayOfMonth(),
237   - DateUtil.date2LocalDateTime(time).getHour(),
238   - 0, 0);
239   - return DateUtil.localDateTime2Date(thisHourStart);
240   - }
241   -
242   - public static Date getThisHourEndTime(Date time) {
243   - final LocalDateTime thisHourEnd = LocalDateTime.of(DateUtil.date2LocalDateTime(time).getYear(),
244   - DateUtil.date2LocalDateTime(time).getMonth(),
245   - DateUtil.date2LocalDateTime(time).getDayOfMonth(),
246   - DateUtil.date2LocalDateTime(time).getHour(),
247   - 59, 59);
248   - return DateUtil.localDateTime2Date(thisHourEnd);
249   - }
250   -
251   - /**
252   - * 获取当天起始时间
253   - *
254   - * @return 当天起始时间
255   - */
256   - public static Date getCurrentDayStartTime() {
257   - LocalDateTime now = LocalDateTime.now();
258   - LocalDateTime start = LocalDateTime.of(now.getYear(), now.getMonth(), now.getDayOfMonth(), 0, 0, 0);
259   - ZoneId zone = ZoneId.systemDefault();
260   - Instant instant = start.atZone(zone).toInstant();
261   - return Date.from(instant);
262   - }
263 267  
264   - /**
265   - * 获取当天结束时间
266   - *
267   - * @return 当天结束时间
268   - */
269   - public static Date getCurrentDayEndTime() {
270   - LocalDateTime now = LocalDateTime.now();
271   - LocalDateTime end = LocalDateTime.of(now.getYear(), now.getMonth(), now.getDayOfMonth(), 23, 59, 59);
272   - ZoneId zone = ZoneId.systemDefault();
273   - Instant instant = end.atZone(zone).toInstant();
274   - return Date.from(instant);
275   - }
  268 + val currentDayEndTime: Date
  269 + /**
  270 + * 获取当天结束时间
  271 + *
  272 + * @return 当天结束时间
  273 + */
  274 + get() {
  275 + val now: LocalDateTime = LocalDateTime.now()
  276 + val end: LocalDateTime = LocalDateTime.of(now.year, now.month, now.dayOfMonth, 23, 59, 59)
  277 + val zone: ZoneId = ZoneId.systemDefault()
  278 + val instant: Instant = end.atZone(zone).toInstant()
  279 + return Date.from(instant)
  280 + }
276 281  
277 282  
278 283 /**
... ... @@ -281,12 +286,12 @@ public final class DateUtil {
281 286 * @param date 需要转换格式的日期
282 287 * @return 返回短时间字符串格式 yyyy-MM-dd
283 288 */
284   - public static String getStringDateShort(Date date) {
  289 + fun getStringDateShort(date: Date?): String? {
285 290 if (date == null) {
286   - return null;
  291 + return null
287 292 }
288   - String dateString = sdf.format(date);
289   - return dateString;
  293 + val dateString: String = sdf.format(date)
  294 + return dateString
290 295 }
291 296  
292 297 /**
... ... @@ -295,12 +300,12 @@ public final class DateUtil {
295 300 * @param date 需要转换格式的日期
296 301 * @return 返回短时间字符串格式 yyyy-MM-dd HH:mm:ss
297 302 */
298   - public static String getFullDateString(Date date) {
  303 + fun getFullDateString(date: Date?): String {
299 304 if (date == null) {
300   - return "";
  305 + return ""
301 306 }
302   - SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
303   - return format.format(date);
  307 + val format: SimpleDateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
  308 + return format.format(date)
304 309 }
305 310  
306 311 /**
... ... @@ -309,12 +314,12 @@ public final class DateUtil {
309 314 * @param date 需要转换格式的日期
310 315 * @return 返回短时间字符串格式 yyyy-MM
311 316 */
312   - public static String getMonthString(Date date) {
  317 + fun getMonthString(date: Date?): String {
313 318 if (date == null) {
314   - return "";
  319 + return ""
315 320 }
316   - SimpleDateFormat format = new SimpleDateFormat("yyyy-MM");
317   - return format.format(date);
  321 + val format: SimpleDateFormat = SimpleDateFormat("yyyy-MM")
  322 + return format.format(date)
318 323 }
319 324  
320 325 /**
... ... @@ -324,91 +329,94 @@ public final class DateUtil {
324 329 * @param pattern 时间字符串格式
325 330 * @return 返回时间字符串
326 331 */
327   - public static String getFormatString(Date date, String pattern) {
  332 + fun getFormatString(date: Date?, pattern: String?): String {
328 333 if (date == null) {
329   - return "";
  334 + return ""
  335 + }
  336 + val format: SimpleDateFormat = SimpleDateFormat(pattern)
  337 + return format.format(date)
  338 + }
  339 +
  340 + val nextMonthStartTime: Date?
  341 + /**
  342 + * 获取下月月初时间
  343 + */
  344 + get() {
  345 + return localDate2Date(
  346 + LocalDateTime.now()
  347 + .with(TemporalAdjusters.lastDayOfMonth()).plusDays(1L).toLocalDate()
  348 + )
330 349 }
331   - SimpleDateFormat format = new SimpleDateFormat(pattern);
332   - return format.format(date);
333   - }
334   -
335   - /**
336   - * 获取下月月初时间
337   - */
338   - public static Date getNextMonthStartTime() {
339   - return DateUtil.localDate2Date(LocalDateTime.now()
340   - .with(TemporalAdjusters.lastDayOfMonth()).plusDays(1L).toLocalDate());
341   - }
342 350  
343 351 /**
344 352 * @param offsetYear
345 353 * @return 当前时间 + offsetYear
346 354 */
347   - public static Timestamp getNowExpiredYear(int offsetYear) {
348   - Calendar now = Calendar.getInstance();
349   - now.add(Calendar.YEAR, offsetYear);
350   - return new Timestamp(now.getTime().getTime());
  355 + fun getNowExpiredYear(offsetYear: Int): Timestamp {
  356 + val now: Calendar = Calendar.getInstance()
  357 + now.add(Calendar.YEAR, offsetYear)
  358 + return Timestamp(now.time.time)
351 359 }
352 360  
353 361 /**
354 362 * @param offset
355 363 * @return 当前时间 + offsetMonth
356 364 */
357   - public static Timestamp getNowExpiredMonth(int offset) {
358   - Calendar now = Calendar.getInstance();
359   - now.add(Calendar.MONTH, offset);
360   - return new Timestamp(now.getTime().getTime());
  365 + fun getNowExpiredMonth(offset: Int): Timestamp {
  366 + val now: Calendar = Calendar.getInstance()
  367 + now.add(Calendar.MONTH, offset)
  368 + return Timestamp(now.time.time)
361 369 }
362 370  
363 371 /**
364 372 * @param offset
365 373 * @return 当前时间 + offsetDay
366 374 */
367   - public static Timestamp getNowExpiredDay(int offset) {
368   - Calendar now = Calendar.getInstance();
369   - now.add(Calendar.DATE, offset);
370   - return new Timestamp(now.getTime().getTime());
  375 + fun getNowExpiredDay(offset: Int): Timestamp {
  376 + val now: Calendar = Calendar.getInstance()
  377 + now.add(Calendar.DATE, offset)
  378 + return Timestamp(now.time.time)
371 379 }
372 380  
373 381 /**
374 382 * @param offset
375 383 * @return 当前时间 + offsetDay
376 384 */
377   - public static Timestamp getNowExpiredHour(int offset) {
378   - Calendar now = Calendar.getInstance();
379   - now.add(Calendar.HOUR, offset);
380   - return new Timestamp(now.getTime().getTime());
  385 + fun getNowExpiredHour(offset: Int): Timestamp {
  386 + val now: Calendar = Calendar.getInstance()
  387 + now.add(Calendar.HOUR, offset)
  388 + return Timestamp(now.time.time)
381 389 }
382 390  
383 391 /**
384 392 * @param offsetSecond
385 393 * @return 当前时间 + offsetSecond
386 394 */
387   - public static Timestamp getNowExpiredSecond(int offsetSecond) {
388   - Calendar now = Calendar.getInstance();
389   - now.add(Calendar.SECOND, offsetSecond);
390   - return new Timestamp(now.getTime().getTime());
  395 + fun getNowExpiredSecond(offsetSecond: Int): Timestamp {
  396 + val now: Calendar = Calendar.getInstance()
  397 + now.add(Calendar.SECOND, offsetSecond)
  398 + return Timestamp(now.time.time)
391 399 }
392 400  
393 401 /**
394 402 * @param offset
395 403 * @return 当前时间 + offset
396 404 */
397   - public static Timestamp getNowExpiredMinute(int offset) {
398   - Calendar now = Calendar.getInstance();
399   - now.add(Calendar.MINUTE, offset);
400   - return new Timestamp(now.getTime().getTime());
  405 + fun getNowExpiredMinute(offset: Int): Timestamp {
  406 + val now: Calendar = Calendar.getInstance()
  407 + now.add(Calendar.MINUTE, offset)
  408 + return Timestamp(now.time.time)
401 409 }
402 410  
403 411 /**
404 412 * @param offset
405 413 * @return 指定时间 + offsetDay
406 414 */
407   - public static Timestamp getExpiredDay(Date givenDate, int offset) {
408   - Calendar date = Calendar.getInstance();
409   - date.setTime(givenDate);
410   - date.add(Calendar.DATE, offset);
411   - return new Timestamp(date.getTime().getTime());
  415 + fun getExpiredDay(givenDate: Date?, offset: Int): Timestamp {
  416 + val date: Calendar = Calendar.getInstance()
  417 + date.time = givenDate
  418 + date.add(Calendar.DATE, offset)
  419 + return Timestamp(date.time.time)
412 420 }
413 421  
414 422 /**
... ... @@ -417,33 +425,33 @@ public final class DateUtil {
417 425 * @param offset
418 426 * @return 指定时间 + offsetMonth
419 427 */
420   - public static Timestamp getExpiredMonth(Date givenDate, int offset) {
421   - Calendar date = Calendar.getInstance();
422   - date.setTime(givenDate);
423   - date.add(Calendar.MONTH, offset);
424   - return new Timestamp(date.getTime().getTime());
  428 + fun getExpiredMonth(givenDate: Date?, offset: Int): Timestamp {
  429 + val date: Calendar = Calendar.getInstance()
  430 + date.time = givenDate
  431 + date.add(Calendar.MONTH, offset)
  432 + return Timestamp(date.time.time)
425 433 }
426 434  
427 435 /**
428 436 * @param
429 437 * @return 指定时间 + offsetYear
430 438 */
431   - public static Timestamp getExpiredYear(Date givenDate, int offsetYear) {
432   - Calendar date = Calendar.getInstance();
433   - date.setTime(givenDate);
434   - date.add(Calendar.YEAR, offsetYear);
435   - return new Timestamp(date.getTime().getTime());
  439 + fun getExpiredYear(givenDate: Date?, offsetYear: Int): Timestamp {
  440 + val date: Calendar = Calendar.getInstance()
  441 + date.time = givenDate
  442 + date.add(Calendar.YEAR, offsetYear)
  443 + return Timestamp(date.time.time)
436 444 }
437 445  
438 446 /**
439 447 * @param second
440 448 * @return 指定时间 + offsetSecond
441 449 */
442   - public static Timestamp getExpiredSecond(Date givenDate, int second) {
443   - Calendar date = Calendar.getInstance();
444   - date.setTime(givenDate);
445   - date.add(Calendar.SECOND, second);
446   - return new Timestamp(date.getTime().getTime());
  450 + fun getExpiredSecond(givenDate: Date?, second: Int): Timestamp {
  451 + val date: Calendar = Calendar.getInstance()
  452 + date.time = givenDate
  453 + date.add(Calendar.SECOND, second)
  454 + return Timestamp(date.time.time)
447 455 }
448 456  
449 457 /**
... ... @@ -454,11 +462,11 @@ public final class DateUtil {
454 462 * @param type 日期字段类型
455 463 * @return
456 464 */
457   - public static Timestamp getExpired(Date givenDate, int offset, Integer type) {
458   - Calendar date = Calendar.getInstance();
459   - date.setTime(givenDate);
460   - date.add(type, offset);
461   - return new Timestamp(date.getTime().getTime());
  465 + fun getExpired(givenDate: Date, offset: Int, type: Int): Timestamp {
  466 + val date: Calendar = Calendar.getInstance()
  467 + date.time = givenDate
  468 + date.add(type, offset)
  469 + return Timestamp(date.time.time)
462 470 }
463 471  
464 472 /**
... ... @@ -469,28 +477,30 @@ public final class DateUtil {
469 477 * @param type 类型
470 478 * @return 计算结果
471 479 */
472   - public static Integer sub(Date d1, Date d2, String type) {
  480 + fun sub(d1: Date?, d2: Date?, type: String): Int? {
473 481 if (d1 == null || d2 == null) {
474   - return null;
  482 + return null
475 483 }
476   - long result = 0L;
477   - long DAY = 24 * 60 * 60 * 1000L;
478   - long sub = d1.getTime() - d2.getTime();
479   - long daysub = (sub / DAY);
480   - long y1 = d1.getYear(), y2 = d2.getYear();
481   - long m1 = d1.getMonth(), m2 = d2.getMonth();
482   - long monthsub = (y1 - y2) * 12 + (m1 - m2);
  484 + var result: Long = 0L
  485 + val DAY: Long = 24 * 60 * 60 * 1000L
  486 + val sub: Long = d1.time - d2.time
  487 + val daysub: Long = (sub / DAY)
  488 + val y1: Long = d1.year.toLong()
  489 + val y2: Long = d2.year.toLong()
  490 + val m1: Long = d1.month.toLong()
  491 + val m2: Long = d2.month.toLong()
  492 + val monthsub: Long = (y1 - y2) * 12 + (m1 - m2)
483 493 //月
484   - if ("m".equals(type)) {
485   - result = monthsub;
  494 + if (("m" == type)) {
  495 + result = monthsub
486 496 //年
487   - } else if ("y".equals(type)) {
488   - result = monthsub / 12;
  497 + } else if (("y" == type)) {
  498 + result = monthsub / 12
489 499 //天
490   - } else if ("d".equals(type)) {
491   - result = daysub;
  500 + } else if (("d" == type)) {
  501 + result = daysub
492 502 }
493   - return (int) result;
  503 + return result.toInt()
494 504 }
495 505  
496 506 /**
... ... @@ -499,15 +509,15 @@ public final class DateUtil {
499 509 * @param date
500 510 * @return
501 511 */
502   - public static boolean isBeforeDawn(Date date) {
  512 + fun isBeforeDawn(date: Date): Boolean {
503 513 if (Objects.isNull(date)) {
504   - return false;
  514 + return false
505 515 }
506   - LocalDateTime dateTime = date2LocalDateTime(date);
507   - SimpleDateFormat df = new SimpleDateFormat("HH");
508   - String str = df.format(localDateTime2Date(dateTime));
509   - int a = Integer.parseInt(str);
510   - return a >= 0 && a <= 6;
  516 + val dateTime: LocalDateTime = date2LocalDateTime(date)
  517 + val sdf: SimpleDateFormat = SimpleDateFormat("HH")
  518 + val str: String = sdf.format(localDateTime2Date(dateTime))
  519 + val a: Int = str.toInt()
  520 + return a >= 0 && a <= 6
511 521 }
512 522  
513 523 /**
... ... @@ -516,15 +526,15 @@ public final class DateUtil {
516 526 * @param date
517 527 * @return
518 528 */
519   - public static boolean isMorning(Date date) {
  529 + fun isMorning(date: Date): Boolean {
520 530 if (Objects.isNull(date)) {
521   - return false;
  531 + return false
522 532 }
523   - LocalDateTime dateTime = date2LocalDateTime(date);
524   - SimpleDateFormat df = new SimpleDateFormat("HH");
525   - String str = df.format(localDateTime2Date(dateTime));
526   - int a = Integer.parseInt(str);
527   - return a > 6 && a <= 12;
  533 + val dateTime: LocalDateTime = date2LocalDateTime(date)
  534 + val sdf: SimpleDateFormat = SimpleDateFormat("HH")
  535 + val str: String = sdf.format(localDateTime2Date(dateTime))
  536 + val a: Int = str.toInt()
  537 + return a in 7..12
528 538 }
529 539  
530 540 /**
... ... @@ -533,15 +543,15 @@ public final class DateUtil {
533 543 * @param date
534 544 * @return
535 545 */
536   - public static boolean isAfternoon(Date date) {
  546 + fun isAfternoon(date: Date): Boolean {
537 547 if (Objects.isNull(date)) {
538   - return false;
  548 + return false
539 549 }
540   - LocalDateTime dateTime = date2LocalDateTime(date);
541   - SimpleDateFormat df = new SimpleDateFormat("HH");
542   - String str = df.format(localDateTime2Date(dateTime));
543   - int a = Integer.parseInt(str);
544   - return a > 12 && a <= 18;
  550 + val dateTime: LocalDateTime = date2LocalDateTime(date)
  551 + val df: SimpleDateFormat = SimpleDateFormat("HH")
  552 + val str: String = df.format(localDateTime2Date(dateTime))
  553 + val a: Int = str.toInt()
  554 + return a > 12 && a <= 18
545 555 }
546 556  
547 557 /**
... ... @@ -550,29 +560,14 @@ public final class DateUtil {
550 560 * @param date
551 561 * @return
552 562 */
553   - public static boolean isEvening(Date date) {
  563 + fun isEvening(date: Date): Boolean {
554 564 if (Objects.isNull(date)) {
555   - return false;
556   - }
557   - LocalDateTime dateTime = date2LocalDateTime(date);
558   - SimpleDateFormat df = new SimpleDateFormat("HH");
559   - String str = df.format(localDateTime2Date(dateTime));
560   - int a = Integer.parseInt(str);
561   - return a > 18 && a <= 23;
562   - }
563   -
564   - public static void main(String[] args) throws ParseException {
565   - SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
566   - Date date = format.parse("2020-09-19 15:45:30");
567   -
568   - Timestamp expired = DateUtil.getExpired(date, 3, Calendar.DATE);
569   - if (!isBeforeDawn(expired)) {
570   - expired = getExpired(startDate(expired), 1, Calendar.DATE);
571   - System.out.println(expired);
  565 + return false
572 566 }
573   - System.out.println(getEndInTime(getMonthEndDay()));
574   - System.out.println(expired);
575   - System.out.println(startDate(DateUtil.getMonthFirstDay(date)));
576   - ;
  567 + val dateTime: LocalDateTime = date2LocalDateTime(date)
  568 + val df: SimpleDateFormat = SimpleDateFormat("HH")
  569 + val str: String = df.format(localDateTime2Date(dateTime))
  570 + val a: Int = str.toInt()
  571 + return a > 18 && a <= 23
577 572 }
578 573 }
... ...
fw-hestia-common/src/main/java/cn/fw/hestia/common/utils/StringUtils.java
... ... @@ -88,7 +88,7 @@ public final class StringUtils {
88 88 * @return boolean
89 89 */
90 90 public static boolean isValid(Object obj) {
91   - return obj != null && obj.toString().length() > 0;
  91 + return obj != null && !obj.toString().isEmpty();
92 92 }
93 93  
94 94 /**
... ... @@ -98,7 +98,7 @@ public final class StringUtils {
98 98 * @return
99 99 */
100 100 public static boolean isEmpty(Object obj) {
101   - return obj == null || obj.toString().length() == 0;
  101 + return obj == null || obj.toString().isEmpty();
102 102 }
103 103  
104 104 /**
... ... @@ -178,7 +178,7 @@ public final class StringUtils {
178 178 if (i > 0) {
179 179 s.append(split);
180 180 }
181   - s.append(wrap + list[i] + wrap);
  181 + s.append(wrap).append(list[i]).append(wrap);
182 182 }
183 183 return s.toString();
184 184 }
... ... @@ -305,8 +305,7 @@ public final class StringUtils {
305 305 return input;
306 306 }
307 307 buffer.append(tail);
308   - } catch (UnsupportedEncodingException e) {
309   - e.printStackTrace();
  308 + } catch (UnsupportedEncodingException ignored) {
310 309 }
311 310 return buffer.toString();
312 311 }
... ... @@ -386,7 +385,7 @@ public final class StringUtils {
386 385 * @return
387 386 * @throws IOException
388 387 */
389   - public static String toJsonValue(Object value) throws IOException {
  388 + public static String toJsonValue(Object value) {
390 389 if (value instanceof Number) {
391 390 return value.toString();
392 391 } else {
... ... @@ -465,8 +464,7 @@ public final class StringUtils {
465 464 int len = text.length();
466 465 try {
467 466 len = text.getBytes("GBK").length;//SQLServer数据库用的GBK编码
468   - } catch (UnsupportedEncodingException e) {
469   - e.printStackTrace();
  467 + } catch (UnsupportedEncodingException ignored) {
470 468 }
471 469 return len;
472 470 }
... ... @@ -519,6 +517,7 @@ public final class StringUtils {
519 517  
520 518 /**
521 519 * 获取默认值
  520 + *
522 521 * @param str
523 522 * @param defaultStr
524 523 * @return
... ...