一個時間格式化的工具類:TimeUtil

源代碼如下:

import android.content.Context;
import android.text.TextUtils;
import android.text.format.DateUtils;

import java.text.Format;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class TimeUtil {

    public static final int TYPE_YEAR_MOUTH_DAY_TIME = 1;
    public static final int TYPE_MOUTH_DAY_TIME = 2;
    public static final int TYPE_YEAR_MOUTH_DAY = 3;
    public static final int TYPE_MOUTH_DAY = 4;
    public static final int TYPE_WEEK = 5;
    public static final int TYPE_MONTH = 6;
    public static final int TYPE_YEAR_MOUTH = 7;
    public static final int TYPE_AUTO = 8;//HH:mm:ss
    public static final int TYPE_AUTO_WEEK = 9;//今天||昨天||周幾
    public static final int TYPE_AUTO_MOUTH = 10;//本月||5月||4月

    private static final int TYPE_TIME = 21;
    private static final int TYPE_TODAY = 22;
    private static final int TYPE_YESTERDAY = 23;

    private static String patternYear = "[/\\-.]yyyy|yyyy[/\\-.年]";
    private static String patternWeek = "[Ee] ,|, [Ee]|EEEE";// week格式

    /**
     * 返回格式化后的時間
     * @param context
     * @param when
     * @param type
     * @return
     */
    public static String format(Context context, long when, int type) {
        Format dateFormat = android.text.format.DateFormat.getDateFormat(context);
        String pattern = ((SimpleDateFormat) dateFormat).toLocalizedPattern();

        //刪除星期
        Pattern patt = Pattern.compile(patternWeek);
        Matcher matt = patt.matcher(pattern);
        String patternResult = matt.replaceAll("");
        //刪除空格
        String styleResult = patternResult.replace(" ", "");

        SimpleDateFormat formatter = null;

        Pattern pat = Pattern.compile(patternYear);
        Matcher mat = pat.matcher(styleResult);

        String time = " HH:mm:ss";
        String changePattern = "";
        String timeResult = "";

        Date whenDate = new Date(when);

        //自動轉(zhuǎn)換
        if (type == TYPE_AUTO) {
            Date currDate = new Date(System.currentTimeMillis());
            if (DateUtils.isToday(when)) {
                type = TYPE_TIME;
            } else if (whenDate.getYear() != currDate.getYear()) {
                type = TYPE_YEAR_MOUTH_DAY_TIME;
            } else {
                type = TYPE_MOUTH_DAY_TIME;
            }
        } else if (type == TYPE_AUTO_WEEK) {//今天||昨天||周幾
            long nowTime = System.currentTimeMillis();
            int passTime = (int) Math.floor((nowTime - when) / 1000);
            if (DateUtils.isToday(when)) {
                type = TYPE_TODAY;
            } else if (!DateUtils.isToday(when) && passTime < 86400) {
                type = TYPE_YESTERDAY;
            } else {
                type = TYPE_WEEK;
            }
        } else if (type == TYPE_AUTO_MOUTH) {
            Date currDate = new Date(System.currentTimeMillis());
            if (whenDate.getYear() != currDate.getYear()) {
                Calendar cal = Calendar.getInstance();
                cal.setTime(whenDate);
                timeResult = String.valueOf(cal.get(Calendar.YEAR)) + " 年" + String.valueOf(whenDate.getMonth() + 1) + " 月";
            } else if (whenDate.getYear() == currDate.getYear() && whenDate.getMonth() == currDate.getMonth()) {
                timeResult = "本月";
            } else {
                timeResult = String.valueOf(whenDate.getMonth() + 1) + " 月";
            }
        }

        switch (type) {
            case TYPE_YEAR_MOUTH_DAY:
                time = "";
            case TYPE_YEAR_MOUTH_DAY_TIME:
                if (mat.find()) {
                    changePattern = styleResult;
                } else {
                    changePattern = "yyyy-MM-dd";
                }
                changePattern += time;
                break;

            case TYPE_MOUTH_DAY_TIME:
                if (mat.find()) {
                    changePattern = mat.replaceAll("");
                } else {
                    changePattern = "MM-dd";
                }
                changePattern += time;
                break;

            case TYPE_MOUTH_DAY:
                if (mat.find()) {
                    changePattern = mat.replaceAll("");
                } else {
                    changePattern = "MM-dd";
                }
                break;
            case TYPE_YEAR_MOUTH:
                if (mat.find()) {
                    changePattern = mat.replaceAll("");
                } else {
                    changePattern = "yyyy-MM";
                }
                break;

            case TYPE_TIME:
                changePattern = "HH:mm:ss";
                break;

            case TYPE_WEEK:
                timeResult = getWeekOfDate(when);
                break;

            case TYPE_MONTH:
                changePattern = "MM";
                break;

            case TYPE_TODAY:
                timeResult = "今天";
                break;

            case TYPE_YESTERDAY:
                timeResult = "昨天";
                break;

            default:
                break;
        }

        if (!TextUtils.isEmpty(changePattern)) {
            formatter = new SimpleDateFormat(changePattern);
            timeResult = formatter.format(whenDate);
        }

        return timeResult;
    }

    /**
     * 返回當(dāng)前時間是星期幾
     * @param time
     * @return
     */
    public static String getWeekOfDate(long time) {
        Date date = new Date(time);
        String[] weekDays = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        int w = cal.get(Calendar.DAY_OF_WEEK) - 1;
        if (w < 0)
            w = 0;
        return weekDays[w];
    }

    /**
     * 微信朋友圈動態(tài)的發(fā)送時間顯示方式
     * @param when
     * @return
     */
    public static String format(long when) {
        String timeResult = null;
        long nowTime = System.currentTimeMillis();
        int passTime = (int) Math.floor((nowTime - when) / 1000);//發(fā)送的時間和當(dāng)前時間的間隔  單位:秒
        if (DateUtils.isToday(when)) {
            if (passTime < 60) {
                timeResult = "1分鐘前";
            } else if (passTime > 60 && passTime < 3600) {
                timeResult = passTime / 60 + "分鐘前";
            } else if (passTime >= 3600 && passTime < 86400) {
                timeResult = (int) Math.floor(passTime / (60 * 60)) + "小時前";
            }
        } else {
            if (passTime < 86400) {
                timeResult = "昨天";
            } else {
                timeResult = (int) Math.ceil((passTime / 86400)) + 1 + "天前";
            }
        }

        return timeResult;
    }
}

格式化結(jié)果展示

   /**
     *
     06-01 10:38:40.477 18435-18435/com.github.mvp I/System.out: 07:52:00
     06-01 10:38:40.478 18435-18435/com.github.mvp I/System.out: 本月
     06-01 10:38:40.478 18435-18435/com.github.mvp I/System.out: 今天
     06-01 10:38:40.478 18435-18435/com.github.mvp I/System.out: 06
     06-01 10:38:40.479 18435-18435/com.github.mvp I/System.out: 06-01
     06-01 10:38:40.479 18435-18435/com.github.mvp I/System.out: 06-01 07:52:00
     06-01 10:38:40.480 18435-18435/com.github.mvp I/System.out: 2017-06
     06-01 10:38:40.480 18435-18435/com.github.mvp I/System.out: 2017-06-01
     06-01 10:38:40.480 18435-18435/com.github.mvp I/System.out: 2017-06-01 07:52:00
     06-01 10:38:40.481 18435-18435/com.github.mvp I/System.out: 星期四
     * @param time
     */
    private void showTimeFormat(long time) {
        System.out.println(TimeUtil.format(this, time, TimeUtil.TYPE_AUTO));
        System.out.println(TimeUtil.format(this, time, TimeUtil.TYPE_AUTO_MOUTH));
        System.out.println(TimeUtil.format(this, time, TimeUtil.TYPE_AUTO_WEEK));

        System.out.println(TimeUtil.format(this, time, TimeUtil.TYPE_MONTH));
        System.out.println(TimeUtil.format(this, time, TimeUtil.TYPE_MOUTH_DAY));
        System.out.println(TimeUtil.format(this, time, TimeUtil.TYPE_MOUTH_DAY_TIME));

        System.out.println(TimeUtil.format(this, time, TimeUtil.TYPE_YEAR_MOUTH));
        System.out.println(TimeUtil.format(this, time, TimeUtil.TYPE_YEAR_MOUTH_DAY));
        System.out.println(TimeUtil.format(this, time, TimeUtil.TYPE_YEAR_MOUTH_DAY_TIME));

        System.out.println(TimeUtil.format(this, time, TimeUtil.TYPE_WEEK));

        System.out.println(TimeUtil.format(time));
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,533評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,055評論 3 414
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,365評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,561評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,346評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,889評論 1 321
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,978評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,118評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,637評論 1 333
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,558評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,739評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,246評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 43,980評論 3 346
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,362評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,619評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,347評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,702評論 2 370

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,592評論 25 707
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,776評論 18 139
  • 食品大三 糧工 我的谷物加工
    我的答案是你閱讀 280評論 0 0
  • 長文!! 減肥一年的所有心得體會!! 試著回答一下。我也是學(xué)生,大二開始減肥。身高和題主一樣(其實(shí)好像差一點(diǎn)點(diǎn)16...
    pinkbullet閱讀 803評論 0 14