Java代碼格式化算法_一個時間格式化的工具類: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);

//自動轉換

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;

}

/**

* 返回當前時間是星期幾

* @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];

}

/**

* 微信朋友圈動態的發送時間顯示方式

* @param when

* @return

*/

public static String format(long when) {

String timeResult = null;

long nowTime = System.currentTimeMillis();

int passTime = (int) Math.floor((nowTime - when) / 1000);//發送的時間和當前時間的間隔 單位:秒

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;

}

}

格式化結果展示

/**

*

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));

}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/371085.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/371085.shtml
英文地址,請注明出處:http://en.pswp.cn/news/371085.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

(轉)VS2010/MFC編程入門之前言

雞啄米的C編程入門系列給大家講了C的編程入門知識&#xff0c;大家對C語言在語法和設計思想上應該有了一定的了解了。但是教程中講的例子只是一個個簡單的例程&#xff0c;并沒有可視化窗口。雞啄米在這套VS2010/MFC編程入門教程中將會給大家講解怎樣使用VS2010進行可視化編程&…

JavaOne 2012:JavaFX圖形技巧和竅門

我回到希爾頓&#xff08;皇家宴會廳B&#xff09;看了Richard Bair的&#xff08;Oracle Java客戶架構師&#xff09;的“ JavaFX圖形技巧和竅門”。 Bair與FX Experience相關聯&#xff0c;并且顯然了解JavaFX。 拜爾說&#xff0c;他演講的主題是表演。 他告誡說&#xff0c…

web前端知識點1

1. input屬于窗體元素,層級顯示比flash、其它元素都高。請判斷這句話的正確與否。 錯誤 層級顯示優先級&#xff1a; frameset > 表單元素 > 非表單元素 在html中&#xff0c;幀元素&#xff08;frameset&#xff09;的優先級最高&#xff0c;表單元素比非表單元素的優…

18. 使用模板【從零開始學Spring Boot】

轉&#xff1a;http://blog.csdn.net/linxingliang/article/details/52017098 18.1 使用thymeleaf 整體步驟&#xff1a; &#xff08;1&#xff09; 在pom.xml中引入thymeleaf; &#xff08;2&#xff09; 如何關閉thymeleaf緩存 &#xff08;3&#xff09; …

java單元測試算初級_Java____Eclipse下JUnit單元測試(初級)

給大家分享一個鏈接希望對你們有幫助 http://blog.csdn.net/huangbiao86/article/details/6709742今天看圖片命名唯一的策略時看到有個大大用JUnit測試&#xff0c;神奇的樣子&#xff0c;遂上網搜集來三篇JUnit測試的入門文章&#xff0c;作為參考。原作地址在上面&#xff0c…

Hadoop + Amazon EC2 –更新的教程

在Hadoop的Wiki頁面上放置了一個舊教程&#xff1a; http : //wiki.apache.org/hadoop/AmazonEC2 &#xff0c;但是最近我不得不遵循本教程&#xff0c;并且我注意到它沒有涵蓋某些Amazon新功能。 建議您已經熟悉Hadoop的基礎來遵循本教程&#xff0c;可以在Hadoop的主頁http:…

oracle11g 修改字符集 修改為ZHS16GBK

轉&#xff1a;http://www.cnblogs.com/jay-xu33/p/5210098.html oracle11g 修改字符集 修改為ZHS16GBK1.cmd下,cd到oracle數據庫軟件的服務器端 如&#xff1a;D:\app\Administrator\product\11.2.0\dbhome_1\BIN 2.輸入set ORACLE_SID你想進入的數據庫的那個sid 3.輸入 sqlpl…

瀏覽器內核

瀏覽器的四大內核&#xff1a; Trident&#xff0c;Gecko&#xff0c;Webkit&#xff0c;Blink。 不同的內核對網頁編寫語法的解釋也有不同&#xff0c;進而導致同一個頁面在不同內核的瀏覽器下顯示出來的效果也會有所出入&#xff0c;這也是作為一個前端工程師需要了解不同瀏…

2017.4.14 Java String.split()用法小結

在java.lang包中有String.split()方法,返回是一個數組 我在應用中用到一些,給大家總結一下,僅供大家參考: 1、如果用“.”作為分隔的話,必須是如下寫法,String.split("\\."),這樣才能正確的分隔開,不能用String.split("."); 2、如果用“|”作為分隔的話,必…

java線程統一_Java線程結果不一致

我有一個實現可運行的線程類和一個int計數器作為實例變量。兩種同步方法add和sub。當我以某種方式運行測試類時&#xff0c;它幾次會輸出錯誤的結果。據我了解&#xff0c;當方法同步時&#xff0c;整個對象將被鎖定以供其他線程訪問&#xff0c;這種邏輯每次我們都應該獲得相同…

markdown-Macdown

#標題 [頁面錨點](#name) > <a name"name"></a>文字 **加粗**(Command-B) *斜體*(Command-I) * * * 或者 - -- 無序列表 1. 2. 3. 有序列表 、、、 代碼段 、、、 或者用 ~ 代替 或者 上下空一行每行縮進4個空格 <http://www.baidu.com>鏈…

什么是web標準??

web標準 不是某一個標準&#xff0c;而是一系列標準的集合。網頁主要由三部分組成&#xff1a;結構&#xff08;Structure&#xff09;、表現&#xff08;Presentation&#xff09;和行為&#xff08;Behavior&#xff09;。對應的標準也分三方面&#xff1a;結構化標準語言主…

有沒有更好的Marker方法?

自Java 1.5推出以來&#xff0c;就是否在Java中使用Marker接口進行了廣泛的討論和辯論。 這是因為Java 1.5引入了注釋功能&#xff0c;這些功能幾乎可以解決Marker接口的目的。 本文將涵蓋這場辯論的一個有趣的部分。 定義&#xff1a; Java中的標記接口是一個空接口&#xff…

php jquery ajax登錄,jQuery+Ajax+PHP彈出層異步登錄效果(附源碼下載)

彈出層主要用于展示豐富的頁面信息&#xff0c;還有一個更好的應用是彈出表單層豐富交互應用。常見的應用有彈出登錄表單層&#xff0c;用戶提交登錄信息&#xff0c;后臺驗證登錄成功后&#xff0c;彈出層消失&#xff0c;主頁面局部刷新用戶信息。本文我們將給大家介紹如何使…

【CPU】解決打開360或者Chrome瀏覽器CPU占用過高

cmd 運行&#xff1a; RD /s /q "%USERPROFILE%\AppData\Roaming\Microsoft\Protect"轉載于:https://www.cnblogs.com/zwqh/p/6708398.html

# 20155337 2017-2018-1 《信息安全系統設計基礎》第二周課堂實踐+myod

20155337 2017-2018-1 《信息安全系統設計基礎》第二周課堂實踐myod 因為在課上已經提交了四個實驗&#xff0c;還欠缺最后一個實驗&#xff0c;反省一下自己還是操作不熟練&#xff0c;平時在課下應該多多練習linux的命令訓練。 實踐一 每個* .c一個文件&#xff0c;每個*.h一…

css盒模型中margin很牛逼

css盒子模型&#xff0c;說簡單也簡單&#xff0c;用的時候也有不簡單的。 其中margin的值可以為負值&#xff0c;并且為了實現margin&#xff0c;忽略父級的padding、border、甚至定位。這在布局上很有用&#xff0c;要注意。 ------------ 比如&#xff0c;div1&#xff0…

CometD:Java Web應用程序的Facebook類似聊天

聊天就像吃一塊蛋糕或喝一杯熱咖啡一樣容易。 您是否曾經考慮過自己開發聊天程序&#xff1f; 您知道&#xff0c;聊天不容易。 但是&#xff0c;如果您是開發人員&#xff0c;并且閱讀了本文的結尾&#xff0c;則可以嘗試自己開發一個聊天應用程序&#xff0c;并允許您的用戶通…

怎么用PHP建立購物網站,如何使用PHP建設一個購物網站

本系統以PHP為主要制作工具&#xff0c;實現了用戶注冊、登錄、驗證身份及用戶數據的采集、物品的預覽查詢、搜索/查看物品信息&#xff0c;站內最新物品信息發布&#xff0c;可進入在線下單從而實現了網絡銷售。網上購物&#xff0c;這個逐漸流行于二十世紀的購物方式已經為越…

團隊作業2——需求分析原型設計

需求分析&#xff1a; 軟件的最終目的是用來解決用戶的某些問題&#xff0c;需求分析就是要理解要解決的問題&#xff0c;真正明確用戶需求。請發表一篇隨筆&#xff0c;完成初步的需求分析&#xff1a; 1.訪問軟件項目的真實用戶&#xff08;至少10個&#xff09;&#xff0c;…