【Android工具】時間工具類

主要功能:

  • 判斷兩個時間是否爲同一天
  • 將日期信息轉換成今天、明天、後天、星期
  • 把timestamp轉化成yyyy/MM/dd kk:mm:ss等各種形式
  • 將一個時間戳轉換成提示性時間字符串,如剛剛,1秒前,2小時前

詳情請參考如下代碼:

/**
 * 統一時間工具類
 * Created by relaysoul on 2016/3/17.
 */
public class TimeUtil {
    public static final int SECONDS_IN_DAY = 60 * 60 * 24;
    public static final long MILLIS_IN_DAY = 1000L * SECONDS_IN_DAY;

    public static boolean isSameDayOfMillis(final long ms1, final long ms2) {
        final long interval = ms1 - ms2;
        return interval < MILLIS_IN_DAY
                && interval > -1L * MILLIS_IN_DAY
                && toDay(ms1) == toDay(ms2);
    }

    private static long toDay(long millis) {
        return (millis + TimeZone.getDefault().getOffset(millis)) / MILLIS_IN_DAY;
    }

    /**
     * 將日期信息轉換成今天、明天、後天、星期
     *
     * @param date
     * @return
     */
    public static String getDateDetail(String date) {
        Calendar today = Calendar.getInstance();
        Calendar target = Calendar.getInstance();
        Date dateNow = new Date();

        DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        try {
            today.setTime(df.parse(df.format(dateNow)));
            today.set(Calendar.HOUR, 0);
            today.set(Calendar.MINUTE, 0);
            today.set(Calendar.SECOND, 0);
            target.setTime(df.parse(date));
            target.set(Calendar.HOUR, 0);
            target.set(Calendar.MINUTE, 0);
            target.set(Calendar.SECOND, 0);
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return null;
        }
        long intervalMilli = target.getTimeInMillis() - today.getTimeInMillis();
        int xcts = (int) (intervalMilli / (24 * 60 * 60 * 1000));
        return showDateDetail(xcts, target);

    }

    /**
     * 將日期差顯示爲日期或者星期
     *
     * @param xcts
     * @param target
     * @return
     */
    private static String showDateDetail(int xcts, Calendar target) {
        switch (xcts) {
            case 0:
                return TConstant.TODAY;
            case 1:
                return TConstant.TOMORROW;
            case 2:
                return TConstant.AFTER_TOMORROW;
            case -1:
                return TConstant.YESTERDAY;
            case -2:
                return TConstant.BEFORE_YESTERDAY;
            default:
                int dayForWeek = 0;
                dayForWeek = target.get(Calendar.DAY_OF_WEEK);
                switch (dayForWeek) {
                    case 1:
                        return TConstant.SUNDAY;
                    case 2:
                        return TConstant.MONDAY;
                    case 3:
                        return TConstant.TUESDAY;
                    case 4:
                        return TConstant.WEDNESDAY;
                    case 5:
                        return TConstant.THURSDAY;
                    case 6:
                        return TConstant.FRIDAY;
                    case 7:
                        return TConstant.SATURDAY;
                    default:
                        return null;
                }

        }
    }

    /**
     * 把timestamp各式化成yyyy/MM/dd kk:mm:ss
     *
     * @param dateTaken
     * @return
     */
    public static String timeString(long dateTaken) {
        return android.text.format.DateFormat.format("yyyy-MM-dd HH:mm:ss", dateTaken).toString();
    }

    /**
     * 把timestamp各式化成yyyy/MM/dd
     *
     * @param dateTaken
     * @return
     */
    public static String dateString(long dateTaken) {
        return android.text.format.DateFormat.format("yyyy-MM-dd", dateTaken).toString();
    }

    /**
     * 把timestamp各式化成MM-dd
     *
     * @param dateTaken
     * @return
     */
    public static String dateString2(long dateTaken) {
        return android.text.format.DateFormat.format("MM-dd HH:mm", dateTaken).toString();
    }

    public static String dateString3(long dateTaken) {
        return android.text.format.DateFormat.format("MM-dd", dateTaken).toString();
    }

    /**
     * 把timestamp各式化成hh:mm
     *
     * @param dateTaken
     * @return
     */
    public static String msString(long dateTaken) {
        return android.text.format.DateFormat.format("HH:mm", dateTaken).toString();
    }

    /**
     * 把timestamp各式化成dd天kk小時mm分ss秒
     *
     * @param dateTaken
     * @return
     */
    public static String dateInterval(long dateTaken) {
        if (dateTaken < 0) {
            return "00:00:00";
        }
        long s = dateTaken % 60;
        long m = dateTaken / 60 % 60;
        long h = dateTaken / (60 * 60) % 24;
        DecimalFormat format = new DecimalFormat("00");
        return format.format(h) + ":" + format.format(m) + ":" + format.format(s);
    }

    public static String liveStartTime(long startTime) {
        return android.text.format.DateFormat.format("MM-dd HH:mm", startTime).toString();
    }

    /**
     * 將一個時間戳轉換成提示性時間字符串,如剛剛,1秒前
     *
     * @param timeStamp
     * @return
     */
    public static String convertTimeToFormat(long timeStamp) {
        long time = (System.currentTimeMillis() - timeStamp) / 1000;
        //LogHelper.d("convertTimeToFormat--->",String.valueOf(time)+"  傳進來的時間爲:"+String.valueOf(timeStamp));
        if (time < 60 && time >= 0) {
            return "剛剛";
        } else if (time >= 60 && time < 3600) {
            return time / 60 + "分鐘前";
        } else if (time >= 3600 && time < 3600 * 24) {
            return time / 3600 + "小時前";
        } else if(time >= 3600 * 24 && time <= 3600 * 24 * 7){
            return time / (3600 * 24) + "天前";
        } else {
            return timeString(timeStamp);
        }
    }

    /**
     * 獲得服務器時間 s
     * @return
     */
    public static long  getServerTime() {
        return System.currentTimeMillis() / 1000 - Constants.TIME_DIFF;
    }

    /**
     * 獲得服務器時間
     *  yyyy-MM-dd HH:mm:ss
     * @return
     */
    public static String  getFormateServerTime() {
        System.setProperty("user.timezone", "Asia/Shanghai");
        TimeZone tz = TimeZone.getTimeZone("Asia/Shanghai");
        TimeZone.setDefault(tz);
        long serverTime = System.currentTimeMillis() / 1000 - Constants.TIME_DIFF;
        String date = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new java.util.Date(serverTime*1000));
        return date;
    }

    public interface TConstant {
        /**
         * 日期
         */
        String TODAY = "今天";
        String YESTERDAY = "昨天";
        String TOMORROW = "明天";
        String BEFORE_YESTERDAY = "前天";
        String AFTER_TOMORROW = "後天";
        String SUNDAY = "星期日";
        String MONDAY = "星期一";
        String TUESDAY = "星期二";
        String WEDNESDAY = "星期三";
        String THURSDAY = "星期四";
        String FRIDAY = "星期五";
        String SATURDAY = "星期六";
    }

}
發佈了97 篇原創文章 · 獲贊 87 · 訪問量 32萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章