@@ -130,7 +130,35 @@ public static char[] bytes2Chars(byte[] bytes) {
130130 }
131131
132132 /**
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为单位的内存大小
134162 *
135163 * @param byteNum 字节数
136164 * @param unit 单位类型
@@ -142,12 +170,12 @@ public static char[] bytes2Chars(byte[] bytes) {
142170 * </ul>
143171 * @return 以unit为单位的size
144172 */
145- public static double byte2Size (long byteNum , ConstUtils .MemoryUnit unit ) {
173+ public static double byte2MemorySize (long byteNum , ConstUtils .MemoryUnit unit ) {
146174 if (byteNum < 0 ) return -1 ;
147175 switch (unit ) {
148176 default :
149177 case BYTE :
150- return (double ) byteNum / ConstUtils . BYTE ;
178+ return (double ) byteNum ;
151179 case KB :
152180 return (double ) byteNum / ConstUtils .KB ;
153181 case MB :
@@ -157,34 +185,6 @@ public static double byte2Size(long byteNum, ConstUtils.MemoryUnit unit) {
157185 }
158186 }
159187
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-
188188 /**
189189 * 字节数转合适内存大小
190190 * <p>保留3位小数</p>
@@ -193,41 +193,109 @@ public static long size2Byte(long size, ConstUtils.MemoryUnit unit) {
193193 * @return 合适内存大小
194194 */
195195 @ SuppressLint ("DefaultLocale" )
196- public static String byte2FitSize (long byteNum ) {
196+ public static String byte2FitMemorySize (long byteNum ) {
197197 if (byteNum < 0 ) {
198198 return "shouldn't be less than zero!" ;
199199 } else if (byteNum < ConstUtils .KB ) {
200- return String .format ("%.3fB" , ( double ) byteNum );
200+ return String .format ("%.3fB" , byteNum + 0.0005 );
201201 } else if (byteNum < ConstUtils .MB ) {
202- return String .format ("%.3fKB" , ( double ) byteNum / ConstUtils .KB );
202+ return String .format ("%.3fKB" , byteNum / ConstUtils .KB + 0.0005 );
203203 } else if (byteNum < ConstUtils .GB ) {
204- return String .format ("%.3fMB" , ( double ) byteNum / ConstUtils .MB );
204+ return String .format ("%.3fMB" , byteNum / ConstUtils .MB + 0.0005 );
205205 } else {
206- return String .format ("%.3fGB" , ( double ) byteNum / ConstUtils .GB );
206+ return String .format ("%.3fGB" , byteNum / ConstUtils .GB + 0.0005 );
207207 }
208208 }
209209
210210 /**
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为单位的时间长度
212242 *
213243 * @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>
214282 * @return 合适时间长度
215283 */
216284 @ 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+ }
230297 }
298+ return sb .toString ();
231299 }
232300
233301 /**
0 commit comments