StatusTimeUtils

public class StatusTimeUtils
{
    private static final String TAG = StatusTimeUtils.class.getSimpleName();

    private static final long MILLIS_MIN = 1000 * 60;
    private static final long MILLIS_HOUR = MILLIS_MIN * 60;
    
    private static String JUST_NOW, MIN, HOUR, DAY, MONTH, YEAR,
                            YESTERDAY, THE_DAY_BEFORE_YESTERDAY, TODAY;
    
    private static SimpleDateFormat day_format = new SimpleDateFormat("HH:mm");
    private static SimpleDateFormat date_format = new SimpleDateFormat("M-d HH:mm");
    private static SimpleDateFormat year_format = new SimpleDateFormat("yyyy-M-d HH:mm");
    private static SimpleDateFormat orig_format = new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy", Locale.US);
    private static SimpleDateFormat custom_format = new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy", Locale.US);
    private static Calendar sCal1 = Calendar.getInstance(),
                            sCal2 = Calendar.getInstance();
    
    private static StatusTimeUtils mInstance;
    
    private StatusTimeUtils(Context context) {
        Resources res = context.getResources();
        JUST_NOW = res.getString(R.string.just_now);
        MIN = res.getString(R.string.min);
        HOUR = res.getString(R.string.hour);
        DAY = res.getString(R.string.day);
        MONTH = res.getString(R.string.month);
        YEAR = res.getString(R.string.year);
        YESTERDAY = res.getString(R.string.yesterday);
        THE_DAY_BEFORE_YESTERDAY = res.getString(R.string.the_day_before_yesterday);
        TODAY = res.getString(R.string.today);
    }
    
    public static StatusTimeUtils instance(Context context) {
        if (mInstance == null) {
            mInstance = new StatusTimeUtils(context);
        }
        
        return mInstance;
    }
    
    private boolean isSameDay(Calendar now, Calendar msg) {
        int nowDay = now.get(Calendar.DAY_OF_YEAR);
        int msgDay = msg.get(Calendar.DAY_OF_YEAR);

        return nowDay == msgDay;
    }
    
    private boolean isYesterDay(Calendar now, Calendar msg) {
        int nowDay = now.get(Calendar.DAY_OF_YEAR);
        int msgDay = msg.get(Calendar.DAY_OF_YEAR);

        return nowDay == (msgDay + 1);
    }
    
    private boolean isTheDayBeforeYesterday(Calendar now, Calendar msg) {
        int nowDay = now.get(Calendar.DAY_OF_YEAR);
        int msgDay = msg.get(Calendar.DAY_OF_YEAR);

        return nowDay == (msgDay + 2);
    }
    
    private boolean isSameYear(Calendar now, Calendar msg) {
        int nowYear = now.get(Calendar.YEAR);
        int msgYear = msg.get(Calendar.YEAR);

        return nowYear == msgYear;
    }

    public synchronized long parseTimeString(String created_at) {
        try {
            return year_format.parse(created_at).getTime();
        } catch (Exception e) {


            return -1;
        }
    }

    public synchronized String buildTimeString(String created_at) {
        return buildTimeString(parseTimeString(created_at));
    }
    
    public synchronized String buildTimeString(long millis) {
        Calendar cal = sCal1;
        
        cal.setTimeInMillis(millis);
        
        long msg = cal.getTimeInMillis();
        long now = System.currentTimeMillis();
        
        Calendar nowCalendar = sCal2;
        sCal2.setTimeInMillis(now);
        
        long differ = now - msg;
        long difsec = differ / 1000;
        
        if (difsec < 60) {
            return JUST_NOW;
        }
        
        long difmin = difsec / 60;
        
        if (difmin < 60) {
            return String.valueOf(difmin) + MIN;
        }
        
        long difhour = difmin / 60;
        
        if (difhour < 24 && isSameDay(nowCalendar, cal)) {
            return TODAY + " " + day_format.format(cal.getTime());
        }
        
        long difday = difhour / 24;
        
        if (difday < 31) {
            if (isYesterDay(nowCalendar, cal)) {
                return YESTERDAY + " " + day_format.format(cal.getTime());
            } else if (isTheDayBeforeYesterday(nowCalendar, cal)) {
                return THE_DAY_BEFORE_YESTERDAY + " " + day_format.format(cal.getTime());
            } else {
                return date_format.format(cal.getTime());
            }
        }
        
        long difmonth = difday / 31;
        
        if (difmonth < 12 && isSameYear(nowCalendar, cal)) {
            return date_format.format(cal.getTime());
        }
        
        return year_format.format(cal.getTime());
    }
}
原文地址:https://www.cnblogs.com/hsji/p/5209578.html