• 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());
        }
    }
  • 相关阅读:
    Ext2.0布局类初探
    从DHTML、HTC、XHTML到AJAX
    我常用的一些ASP自定义函数
    Javascript的调试利器:Firebug使用详解
    ODBC的多线程应用
    召唤有丰富IOCP实践经验的同行
    欢迎
    关于.NET安装时的dotNETFXRedist_x86.msm
    所谓设计模式
    VC编程经验汇总(一)
  • 原文地址:https://www.cnblogs.com/hsji/p/5209578.html
Copyright © 2020-2023  润新知