8
8
9
9
10
10
public class HLLUtils {
11
- public static String TIME_FORMAT = "yyyyMMddHHmm" ;
12
11
private static String TIME_FORMAT_MONTH_DAY = "MMdd" ;
13
12
private static String TIME_FORMAT_DAY_MINUTES = "MMddHHmm" ;
14
13
private static String TIME_FORMAT_DAY_HOURS = "MMddHH" ;
15
- static SimpleDateFormat FORMAT_MONTH_DAY = new SimpleDateFormat (TIME_FORMAT_MONTH_DAY );
16
- static SimpleDateFormat FORMAT_DAY_HOURS = new SimpleDateFormat (TIME_FORMAT_DAY_HOURS );
17
- static SimpleDateFormat FORMAT_DAY_MINUTES = new SimpleDateFormat (TIME_FORMAT_DAY_MINUTES );
14
+ private static SimpleDateFormat FORMAT_MONTH_DAY = new SimpleDateFormat (TIME_FORMAT_MONTH_DAY );
15
+ private static SimpleDateFormat FORMAT_DAY_HOURS = new SimpleDateFormat (TIME_FORMAT_DAY_HOURS );
16
+ private static SimpleDateFormat FORMAT_DAY_MINUTES = new SimpleDateFormat (TIME_FORMAT_DAY_MINUTES );
18
17
18
+ /**
19
+ * 获取两个日期之间的键
20
+ *
21
+ * @param d1 日期1
22
+ * @param d2 日期2
23
+ * @return 键列表
24
+ */
19
25
public static List <String > parse (Date d1 , Date d2 ) {
20
- ArrayList list ;
26
+ List < String > list = new ArrayList <>() ;
21
27
if (d1 .compareTo (d2 ) == 0 ) {
22
- return Collections . emptyList () ;
28
+ return list ;
23
29
}
24
30
25
- // if less than an hour, sum all minutes
31
+ // 若时间差小于 1 小时
26
32
long delta = d2 .getTime () - d1 .getTime ();
27
33
if (delta == 0 ) {
28
- return Collections . emptyList () ;
34
+ return list ;
29
35
}
30
36
if (delta < DateUtils .MILLIS_PER_HOUR ) {
31
37
int minutesDiff = (int ) (delta / DateUtils .MILLIS_PER_MINUTE );
32
- list = new ArrayList <String >();
33
38
Date date1Increment = d1 ;
34
39
while (d2 .compareTo (date1Increment ) > 0 && minutesDiff > 0 ) {
35
40
list .add (FORMAT_DAY_MINUTES .format (date1Increment ));
36
41
date1Increment = DateUtils .addMinutes (date1Increment , 1 );
37
42
}
38
- // if less than an day, trim hours sum all, pass minutes part
43
+ // 若时间差小于 1 天
39
44
} else if (delta < DateUtils .MILLIS_PER_DAY ) {
40
- list = new ArrayList <String >();
41
45
Date dateLastPortionHour = DateUtils .truncate (d2 , Calendar .HOUR_OF_DAY );
42
46
list .addAll (parse (dateLastPortionHour , d2 ));
43
47
long delta2 = dateLastPortionHour .getTime () - d1 .getTime ();
@@ -49,13 +53,11 @@ public static List<String> parse(Date d1, Date d2) {
49
53
}
50
54
list .addAll (parse (d1 , DateUtils .addHours (dateLastPortionHour , -1 * hoursDiff )));
51
55
} else {
52
- list = new ArrayList <String >();
53
56
Date dateLastPortionDay = DateUtils .truncate (d2 , Calendar .DAY_OF_MONTH );
54
57
list .addAll (parse (dateLastPortionDay , d2 ));
55
58
long delta2 = dateLastPortionDay .getTime () - d1 .getTime ();
56
- // if less than an month, trim days sum all, pass hours part
59
+ // 若时间差小于 1 个月
57
60
int daysDiff = (int ) (delta2 / DateUtils .MILLIS_PER_DAY );
58
- // Date date1Increment = d1;
59
61
Date date1Increment = DateUtils .addDays (dateLastPortionDay , -1 * daysDiff );
60
62
while (dateLastPortionDay .compareTo (date1Increment ) > 0 && daysDiff > 0 ) {
61
63
list .add (FORMAT_MONTH_DAY .format (date1Increment ));
@@ -66,19 +68,70 @@ public static List<String> parse(Date d1, Date d2) {
66
68
return list ;
67
69
}
68
70
71
+ /**
72
+ * 获取从 date 往前推 minutes 分钟的键列表
73
+ *
74
+ * @param date 特定日期
75
+ * @param minutes 分钟数
76
+ * @return 键列表
77
+ */
69
78
public static List <String > getLastMinutes (Date date , int minutes ) {
70
79
return parse (DateUtils .addMinutes (date , -1 * minutes ), date );
71
80
}
72
81
82
+ /**
83
+ * 获取从 date 往前推 hours 个小时的键列表
84
+ *
85
+ * @param date 特定日期
86
+ * @param hours 小时数
87
+ * @return 键列表
88
+ */
73
89
public static List <String > getLastHours (Date date , int hours ) {
74
90
return parse (DateUtils .addHours (date , -1 * hours ), date );
75
91
}
76
92
93
+ /**
94
+ * 获取从 date 开始往前推 days 天的键列表
95
+ *
96
+ * @param date 特定日期
97
+ * @param days 天数
98
+ * @return 键列表
99
+ */
77
100
public static List <String > getLastDays (Date date , int days ) {
78
101
return parse (DateUtils .addDays (date , -1 * days ), date );
79
102
}
80
103
104
+ /**
105
+ * 为keys列表添加前缀
106
+ *
107
+ * @param keys 键列表
108
+ * @param prefix 前缀符号
109
+ * @return 添加了前缀的键列表
110
+ */
81
111
public static List <String > addPrefix (List <String > keys , String prefix ) {
82
112
return keys .stream ().map (key -> prefix + key ).collect (Collectors .toList ());
83
113
}
114
+
115
+ public static void main (String [] args ) {
116
+ Date d1 = new Date ();
117
+ d1 .setTime ((long ) (System .currentTimeMillis () - 3600 * 1000 * 24 * 1.2 ));
118
+ Date d2 = new Date ();
119
+ List <String > res = parse (d1 , d2 );
120
+ res .forEach (System .out ::println );
121
+ List <String > newRes = addPrefix (res , "USER:LOGIN:" );
122
+ System .out .println ("-------" );
123
+ newRes .forEach (System .out ::println );
124
+
125
+ List <String > lastThreeDays = getLastDays (new Date (), 3 );
126
+ System .out .println ("-------" );
127
+ lastThreeDays .forEach (System .out ::println );
128
+
129
+ List <String > lastTwoHours = getLastHours (new Date (), 2 );
130
+ System .out .println ("-------" );
131
+ lastTwoHours .forEach (System .out ::println );
132
+
133
+ List <String > lastFourMinutes = getLastMinutes (new Date (), 4 );
134
+ System .out .println ("-------" );
135
+ lastFourMinutes .forEach (System .out ::println );
136
+ }
84
137
}
0 commit comments