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.mzph.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;…