DateUtils.java
7.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
package com.share.mvpsdk.utils;
import android.text.TextUtils;
import android.text.format.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
/**
* Created by Horrarndoo on 2017/8/31.
* <p>
* 日期时间工具类
*/
public class DateUtils {
public static final long ONE_SECOND_MILLIONS = 1000;
public static final long ONE_MINUTE_MILLIONS = 60 * ONE_SECOND_MILLIONS;
public static final long ONE_HOUR_MILLIONS = 60 * ONE_MINUTE_MILLIONS;
public static final long ONE_DAY_MILLIONS = 24 * ONE_HOUR_MILLIONS;
public static final int DAY_OF_YEAR = 365;
// 日期格式为 2016-02-03 17:04:58
public static final String PATTERN_DATE = "yyyy年MM月dd日";
public static final String PATTERN_TIME = "HH:mm:ss";
public static final String PATTERN_SPLIT = " ";
public static final String PATTERN = PATTERN_DATE + PATTERN_SPLIT + PATTERN_TIME;
public static String getShortTime(String dateStr) {
String str;
Date date = str2date(dateStr);
Date curDate = new Date();
long durTime = curDate.getTime() - date.getTime();
int dayDiff = calculateDayDiff(date, curDate);
if (durTime <= 10 * ONE_MINUTE_MILLIONS) {
str = "刚刚";
} else if (durTime < ONE_HOUR_MILLIONS) {
str = durTime / ONE_MINUTE_MILLIONS + "分钟前";
} else if (dayDiff == 0) {
str = durTime / ONE_HOUR_MILLIONS + "小时前";
} else if (dayDiff == -1) {
str = "昨天" + DateFormat.format("HH:mm", date);
} else if (isSameYear(date, curDate) && dayDiff < -1) {
str = DateFormat.format("MM-dd", date).toString();
} else {
str = DateFormat.format("yyyy-MM", date).toString();
}
return str;
}
/**
* 获取日期 PATTERN_DATE 部分
*/
public static String getDate(String date) {
if (TextUtils.isEmpty(date) || !date.contains(PATTERN_SPLIT)) {
return "";
}
return date.split(PATTERN_SPLIT)[0];
}
/**
* 原有日期上累加月
*
* @return 累加后的日期 PATTERN_DATE 部分
*/
public static String addMonth(String date, int moonCount) {
//如果date为空 就用当前时间
if (TextUtils.isEmpty(date)) {
SimpleDateFormat df = new SimpleDateFormat(PATTERN_DATE + PATTERN_SPLIT + PATTERN_TIME);
date = df.format(new Date());
}
Calendar calendar = str2calendar(date);
calendar.add(Calendar.MONTH, moonCount);
return getDate(calendar2str(calendar));
}
/**
* 计算天数差
*/
public static int calculateDayDiff(Date targetTime, Date compareTime) {
boolean sameYear = isSameYear(targetTime, compareTime);
if (sameYear) {
return calculateDayDiffOfSameYear(targetTime, compareTime);
} else {
int dayDiff = 0;
// 累计年数差的整年天数
int yearDiff = calculateYearDiff(targetTime, compareTime);
dayDiff += yearDiff * DAY_OF_YEAR;
// 累计同一年内的天数
dayDiff += calculateDayDiffOfSameYear(targetTime, compareTime);
return dayDiff;
}
}
/**
* 计算同一年内的天数差
*/
public static int calculateDayDiffOfSameYear(Date targetTime, Date compareTime) {
if (targetTime == null || compareTime == null) {
return 0;
}
Calendar tarCalendar = Calendar.getInstance();
tarCalendar.setTime(targetTime);
int tarDayOfYear = tarCalendar.get(Calendar.DAY_OF_YEAR);
Calendar compareCalendar = Calendar.getInstance();
compareCalendar.setTime(compareTime);
int comDayOfYear = compareCalendar.get(Calendar.DAY_OF_YEAR);
return tarDayOfYear - comDayOfYear;
}
/**
* 计算年数差
*/
public static int calculateYearDiff(Date targetTime, Date compareTime) {
if (targetTime == null || compareTime == null) {
return 0;
}
Calendar tarCalendar = Calendar.getInstance();
tarCalendar.setTime(targetTime);
int tarYear = tarCalendar.get(Calendar.YEAR);
Calendar compareCalendar = Calendar.getInstance();
compareCalendar.setTime(compareTime);
int comYear = compareCalendar.get(Calendar.YEAR);
return tarYear - comYear;
}
/**
* 计算月数差
*
* @param targetTime
* @param compareTime
* @return
*/
public static int calculateMonthDiff(String targetTime, String compareTime) {
return calculateMonthDiff(str2date(targetTime, PATTERN_DATE),
str2date(compareTime, PATTERN_DATE));
}
/**
* 计算月数差
*
* @param targetTime
* @param compareTime
* @return
*/
public static int calculateMonthDiff(Date targetTime, Date compareTime) {
Calendar tarCalendar = Calendar.getInstance();
tarCalendar.setTime(targetTime);
int tarYear = tarCalendar.get(Calendar.YEAR);
int tarMonth = tarCalendar.get(Calendar.MONTH);
Calendar compareCalendar = Calendar.getInstance();
compareCalendar.setTime(compareTime);
int comYear = compareCalendar.get(Calendar.YEAR);
int comMonth = compareCalendar.get(Calendar.MONTH);
return ((tarYear - comYear) * 12 + tarMonth - comMonth);
}
/**
* 是否为同一年
*/
public static boolean isSameYear(Date targetTime, Date compareTime) {
if (targetTime == null || compareTime == null) {
return false;
}
Calendar tarCalendar = Calendar.getInstance();
tarCalendar.setTime(targetTime);
int tarYear = tarCalendar.get(Calendar.YEAR);
Calendar compareCalendar = Calendar.getInstance();
compareCalendar.setTime(compareTime);
int comYear = compareCalendar.get(Calendar.YEAR);
return tarYear == comYear;
}
public static Date str2date(String str, String format) {
Date date = null;
try {
if (str != null) {
SimpleDateFormat sdf = new SimpleDateFormat(format);
date = sdf.parse(str);
}
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
public static Date str2date(String str) {
return str2date(str, PATTERN);
}
public static String date2str(Date date) {
return date2str(date, PATTERN);
}
public static String date2str(Date date, String format) {
SimpleDateFormat sdf = new SimpleDateFormat(format, Locale.CHINA);
return sdf.format(date);
}
public static Calendar str2calendar(String str) {
Calendar calendar = null;
Date date = str2date(str);
if (date != null) {
calendar = Calendar.getInstance();
calendar.setTime(date);
}
return calendar;
}
public static Calendar str2calendar(String str, String format) {
Calendar calendar = null;
Date date = str2date(str, format);
if (date != null) {
calendar = Calendar.getInstance();
calendar.setTime(date);
}
return calendar;
}
public static String calendar2str(Calendar calendar) {
return date2str(calendar.getTime());
}
public static String calendar2str(Calendar calendar, String format) {
return date2str(calendar.getTime(), format);
}
}