package com.yeshi.base.utils; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; import android.util.Log; public class TimeUtils { /** * * @param millis * 要转化的毫秒数。 * @param isWhole * 是否强制全部显示小时/分。 * @param isFormat * 时间数字是否要格式化,如果true:少位数前面补全;如果false:少位数前面不补全。 * @return 返回时间字符串:小时/分/秒/毫秒的格式(如:24903600 --> 06小时55分钟)。 */ public static String millisToStringShort(long millis, boolean isWhole, boolean isFormat) { String h = ""; String m = ""; if (isWhole) { h = isFormat ? "00小时" : "0小时"; m = isFormat ? "00分钟" : "0分钟"; } long temp = millis; long hper = 60 * 60 * 1000; long mper = 60 * 1000; long sper = 1000; if (temp / hper > 0) { if (isFormat) { h = temp / hper < 10 ? "0" + temp / hper : temp / hper + ""; } else { h = temp / hper + ""; } h += "小时"; } temp = temp % hper; if (temp / mper > 0) { if (isFormat) { m = temp / mper < 10 ? "0" + temp / mper : temp / mper + ""; } else { m = temp / mper + ""; } m += "分钟"; } return h + m; } /** * @param millis * 要转化的日期毫秒数。 * @param pattern * 要转化为的字符串格式(如:yyyy-MM-dd HH:mm:ss)。 * @return 返回日期字符串。 */ public static String millisToStringDate(long millis, String pattern) { SimpleDateFormat format = new SimpleDateFormat(pattern, Locale.getDefault()); return format.format(new Date(millis)); } /** * @param millis * 要转化的日期毫秒数。 * @param pattern * 要转化为的字符串格式(如:yyyy-MM-dd HH:mm:ss)。 * @return 返回日期字符串(yyyy_MM_dd_HH_mm_ss)。 */ public static String millisToStringFilename(long millis, String pattern) { String dateStr = millisToStringDate(millis, pattern); return dateStr.replaceAll("[- :]", "_"); } public static long oneHourMillis = 60 * 60 * 1000; // 一小时的毫秒数 public static long oneDayMillis = 24 * oneHourMillis; // 一天的毫秒数 public static long oneYearMillis = 365 * oneDayMillis; // 一年的毫秒数 /** * 1小时内用,多少分钟前; 超过1小时,显示时间而无日期; 如果是昨天,则显示昨天 超过昨天再显示日期; 超过1年再显示年。 * * @param millis * @return */ public static String millisToLifeString(long millis) { long now = System.currentTimeMillis(); long todayStart = string2Millis(millisToStringDate(now, "yyyy-MM-dd"), "yyyy-MM-dd"); // 一小时内 if (now - millis <= oneHourMillis && now - millis > 0l) { String m = millisToStringShort(now - millis, false, false); return "".equals(m) ? "1分钟内" : m + "前"; } // 大于今天开始开始值,小于今天开始值加一天(即今天结束值) if (millis >= todayStart && millis <= oneDayMillis + todayStart) { return "今天 " + millisToStringDate(millis, "HH:mm"); } // 大于(今天开始值减一天,即昨天开始值) if (millis > todayStart - oneDayMillis) { return "一天前 "; } if (millis > todayStart - oneDayMillis - oneDayMillis) { return "二天前 "; } if (millis > todayStart - oneDayMillis - oneDayMillis - oneDayMillis) { return "三天前 "; } long thisYearStart = string2Millis(millisToStringDate(now, "yyyy"), "yyyy"); // 大于今天小于今年 // if (millis > thisYearStart) { // return millisToStringDate(millis, "MM月dd日HH:mm"); // } // return millisToStringDate(millis, "yyyy年MM月dd日HH:mm"); return millisToStringDate(millis, "yyyy年MM月dd日HH:mm"); } /** * 字符串解析成毫秒数 * * @param str * @param pattern * @return */ public static long string2Millis(String str, String pattern) { SimpleDateFormat format = new SimpleDateFormat(pattern, Locale.getDefault()); long millis = 0; try { millis = format.parse(str).getTime(); } catch (ParseException e) { Log.e("TAG", e.getMessage()); } return millis; } }