@@ -130,7 +130,35 @@ public static char[] bytes2Chars(byte[] bytes) {
130
130
}
131
131
132
132
/**
133
- * 字节数转以unit为单位的size
133
+ * 以unit为单位的内存大小转字节数
134
+ *
135
+ * @param memorySize 大小
136
+ * @param unit 单位类型
137
+ * <ul>
138
+ * <li>{@link ConstUtils.MemoryUnit#BYTE}: 字节</li>
139
+ * <li>{@link ConstUtils.MemoryUnit#KB} : 千字节</li>
140
+ * <li>{@link ConstUtils.MemoryUnit#MB} : 兆</li>
141
+ * <li>{@link ConstUtils.MemoryUnit#GB} : GB</li>
142
+ * </ul>
143
+ * @return 字节数
144
+ */
145
+ public static long memorySize2Byte (long memorySize , ConstUtils .MemoryUnit unit ) {
146
+ if (memorySize < 0 ) return -1 ;
147
+ switch (unit ) {
148
+ default :
149
+ case BYTE :
150
+ return memorySize ;
151
+ case KB :
152
+ return memorySize * ConstUtils .KB ;
153
+ case MB :
154
+ return memorySize * ConstUtils .MB ;
155
+ case GB :
156
+ return memorySize * ConstUtils .GB ;
157
+ }
158
+ }
159
+
160
+ /**
161
+ * 字节数转以unit为单位的内存大小
134
162
*
135
163
* @param byteNum 字节数
136
164
* @param unit 单位类型
@@ -142,12 +170,12 @@ public static char[] bytes2Chars(byte[] bytes) {
142
170
* </ul>
143
171
* @return 以unit为单位的size
144
172
*/
145
- public static double byte2Size (long byteNum , ConstUtils .MemoryUnit unit ) {
173
+ public static double byte2MemorySize (long byteNum , ConstUtils .MemoryUnit unit ) {
146
174
if (byteNum < 0 ) return -1 ;
147
175
switch (unit ) {
148
176
default :
149
177
case BYTE :
150
- return (double ) byteNum / ConstUtils . BYTE ;
178
+ return (double ) byteNum ;
151
179
case KB :
152
180
return (double ) byteNum / ConstUtils .KB ;
153
181
case MB :
@@ -157,34 +185,6 @@ public static double byte2Size(long byteNum, ConstUtils.MemoryUnit unit) {
157
185
}
158
186
}
159
187
160
- /**
161
- * 以unit为单位的size转字节数
162
- *
163
- * @param size 大小
164
- * @param unit 单位类型
165
- * <ul>
166
- * <li>{@link ConstUtils.MemoryUnit#BYTE}: 字节</li>
167
- * <li>{@link ConstUtils.MemoryUnit#KB} : 千字节</li>
168
- * <li>{@link ConstUtils.MemoryUnit#MB} : 兆</li>
169
- * <li>{@link ConstUtils.MemoryUnit#GB} : GB</li>
170
- * </ul>
171
- * @return 字节数
172
- */
173
- public static long size2Byte (long size , ConstUtils .MemoryUnit unit ) {
174
- if (size < 0 ) return -1 ;
175
- switch (unit ) {
176
- default :
177
- case BYTE :
178
- return size ;
179
- case KB :
180
- return size * ConstUtils .KB ;
181
- case MB :
182
- return size * ConstUtils .MB ;
183
- case GB :
184
- return size * ConstUtils .GB ;
185
- }
186
- }
187
-
188
188
/**
189
189
* 字节数转合适内存大小
190
190
* <p>保留3位小数</p>
@@ -193,41 +193,109 @@ public static long size2Byte(long size, ConstUtils.MemoryUnit unit) {
193
193
* @return 合适内存大小
194
194
*/
195
195
@ SuppressLint ("DefaultLocale" )
196
- public static String byte2FitSize (long byteNum ) {
196
+ public static String byte2FitMemorySize (long byteNum ) {
197
197
if (byteNum < 0 ) {
198
198
return "shouldn't be less than zero!" ;
199
199
} else if (byteNum < ConstUtils .KB ) {
200
- return String .format ("%.3fB" , ( double ) byteNum );
200
+ return String .format ("%.3fB" , byteNum + 0.0005 );
201
201
} else if (byteNum < ConstUtils .MB ) {
202
- return String .format ("%.3fKB" , ( double ) byteNum / ConstUtils .KB );
202
+ return String .format ("%.3fKB" , byteNum / ConstUtils .KB + 0.0005 );
203
203
} else if (byteNum < ConstUtils .GB ) {
204
- return String .format ("%.3fMB" , ( double ) byteNum / ConstUtils .MB );
204
+ return String .format ("%.3fMB" , byteNum / ConstUtils .MB + 0.0005 );
205
205
} else {
206
- return String .format ("%.3fGB" , ( double ) byteNum / ConstUtils .GB );
206
+ return String .format ("%.3fGB" , byteNum / ConstUtils .GB + 0.0005 );
207
207
}
208
208
}
209
209
210
210
/**
211
- * 毫秒时间戳转合适时间长度
211
+ * 以unit为单位的时间长度转毫秒时间戳
212
+ *
213
+ * @param timeSpan 毫秒时间戳
214
+ * @param unit 单位类型
215
+ * <ul>
216
+ * <li>{@link ConstUtils.TimeUnit#MSEC}: 毫秒</li>
217
+ * <li>{@link ConstUtils.TimeUnit#SEC }: 秒</li>
218
+ * <li>{@link ConstUtils.TimeUnit#MIN }: 分</li>
219
+ * <li>{@link ConstUtils.TimeUnit#HOUR}: 小时</li>
220
+ * <li>{@link ConstUtils.TimeUnit#DAY }: 天</li>
221
+ * </ul>
222
+ * @return 毫秒时间戳
223
+ */
224
+ public static long timeSpan2Millis (long timeSpan , ConstUtils .TimeUnit unit ) {
225
+ switch (unit ) {
226
+ default :
227
+ case MSEC :
228
+ return timeSpan ;
229
+ case SEC :
230
+ return timeSpan * ConstUtils .SEC ;
231
+ case MIN :
232
+ return timeSpan * ConstUtils .MIN ;
233
+ case HOUR :
234
+ return timeSpan * ConstUtils .HOUR ;
235
+ case DAY :
236
+ return timeSpan * ConstUtils .DAY ;
237
+ }
238
+ }
239
+
240
+ /**
241
+ * 毫秒时间戳转以unit为单位的时间长度
212
242
*
213
243
* @param millis 毫秒时间戳
244
+ * @param unit 单位类型
245
+ * <ul>
246
+ * <li>{@link ConstUtils.TimeUnit#MSEC}: 毫秒</li>
247
+ * <li>{@link ConstUtils.TimeUnit#SEC }: 秒</li>
248
+ * <li>{@link ConstUtils.TimeUnit#MIN }: 分</li>
249
+ * <li>{@link ConstUtils.TimeUnit#HOUR}: 小时</li>
250
+ * <li>{@link ConstUtils.TimeUnit#DAY }: 天</li>
251
+ * </ul>
252
+ * @return 以unit为单位的时间长度
253
+ */
254
+ public static long millis2TimeSpan (long millis , ConstUtils .TimeUnit unit ) {
255
+ switch (unit ) {
256
+ default :
257
+ case MSEC :
258
+ return millis ;
259
+ case SEC :
260
+ return millis / ConstUtils .SEC ;
261
+ case MIN :
262
+ return millis / ConstUtils .MIN ;
263
+ case HOUR :
264
+ return millis / ConstUtils .HOUR ;
265
+ case DAY :
266
+ return millis / ConstUtils .DAY ;
267
+ }
268
+ }
269
+
270
+ /**
271
+ * 毫秒时间戳转合适时间长度
272
+ *
273
+ * @param millis 毫秒时间戳
274
+ * <p>小于等于0,返回null</p>
275
+ * @param precision 精度
276
+ * <p>precision = 0,返回null</p>
277
+ * <p>precision = 1,返回天</p>
278
+ * <p>precision = 2,返回天和小时</p>
279
+ * <p>precision = 3,返回天、小时和分钟</p>
280
+ * <p>precision = 4,返回天、小时、分钟和秒</p>
281
+ * <p>precision >= 5,返回天、小时、分钟、秒和毫秒</p>
214
282
* @return 合适时间长度
215
283
*/
216
284
@ SuppressLint ("DefaultLocale" )
217
- public static String millis2FitTimeSpan (long millis ) {
218
- if (millis < 0 ) {
219
- return "shouldn't be less than zero!" ;
220
- } else if (millis < ConstUtils .SEC ) {
221
- return String .format ("%d毫秒" , millis );
222
- } else if (millis < ConstUtils .MIN ) {
223
- return String .format ("%d秒" , millis / ConstUtils .SEC );
224
- } else if (millis < ConstUtils .HOUR ) {
225
- return String .format ("%d分" , millis / ConstUtils .MIN );
226
- } else if (millis < ConstUtils .DAY ) {
227
- return String .format ("%d小时" , millis / ConstUtils .HOUR );
228
- } else {
229
- return String .format ("%d天" , millis / ConstUtils .DAY );
285
+ public static String millis2FitTimeSpan (long millis , int precision ) {
286
+ if (millis <= 0 || precision <= 0 ) return null ;
287
+ StringBuilder sb = new StringBuilder ();
288
+ String [] units = {"天" , "小时" , "分钟" , "秒" , "毫秒" };
289
+ int [] unitLen = {86400000 , 3600000 , 60000 , 1000 , 1 };
290
+ precision = Math .min (precision , 5 );
291
+ for (int i = 0 ; i < precision ; i ++) {
292
+ if (millis >= unitLen [i ]) {
293
+ long mode = millis / unitLen [i ];
294
+ millis -= mode * unitLen [i ];
295
+ sb .append (mode ).append (units [i ]);
296
+ }
230
297
}
298
+ return sb .toString ();
231
299
}
232
300
233
301
/**
0 commit comments