Android 时间计算工具 通用类TimeUtil
1.整体分析
1.1.源代码如下,可以直接Copy。
public class TimeUtil {
private static final String TAG = "TimeUtil";
public static String computePastTime(String time) {
// Log.v(TAG, "computePastTime: " + time);
String result = "刚刚";
//2017-02-13T01:20:13.035+08:00
time = time.replace("T", " ");
time = time.substring(0, 22);
// Log.v(TAG, "computePastTime time: " + time);
SimpleDateFormat simpleDateFormat =
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS", Locale.SIMPLIFIED_CHINESE);
try {
Date t = simpleDateFormat.parse(time);
Date now = new Date(System.currentTimeMillis());
long diff = (now.getTime() - t.getTime()) / 1000;
if (diff < 60) {
result = "刚刚";
} else if ((diff /= 60) < 60) {
result = diff + "分钟前";
} else if ((diff /= 60) < 24) {
result = diff + "小时前";
} else if ((diff /= 24) < 30) {
result = diff + "天前";
} else if ((diff /= 30) < 12) {
result = diff + "月前";
} else {
diff /= 12;
result = diff + "年前";
}
} catch (ParseException e) {
e.printStackTrace();
}
// Log.v(TAG, "computePastTime result: " + result);
return result;
}
public static String formatTime(String time) {
// Log.v(TAG, "formatTime: " + time);
//2017-02-13T01:20:13.035+08:00
time = time.replace("T", " ");
time = time.substring(0, 16);
// Log.v(TAG, "formatTime result: " + time);
return time;
}
}
1.2.主要方法
- computePastTime(String time)==>字符串转化为汉字的时间。
- formatTime(String time)==>格式化字符串时间
1.3.参考其他时间类。
public class MyTimeUtils {
//获取时间戳
public static long getTime() {
Calendar calendar = Calendar.getInstance();// 获取当前日历对象
long unixTime = calendar.getTimeInMillis();// 获取当前时区下日期时间对应的时间戳
return unixTime;
}
public static String getTimeString() {
return Long.toString(new Date().getTime());
}
//获取标准时间
public static String getStandardTime() {
SimpleDateFormat formatter = new SimpleDateFormat(BaseApplication.getInstance().getString(R.string.date_show_type_one));
Date curDate = new Date(System.currentTimeMillis());// 获取当前时间
return formatter.format(curDate);
}
// 获取与现在时间的时间差(秒)
public static int getDurationSecond(String time) {
int durationSecond = 0;
SimpleDateFormat df = new SimpleDateFormat(<span style="font-family: SimHei;">"yyyy-MM-dd HH:mm:ss"</span>);
Date date;
try {
date = df.parse(time);
MyLog.i("TimeUtils getDurationSecond Date=" + new Date().toString());
durationSecond = (int) ((new Date().getTime() - date.getTime()) / 1000);
} catch (Exception e) {
MyLog.e("TimeUtils getDurationSecond error=" + e);
}
return durationSecond;
}
// 获取时间差
public static String getDuration(String one, String two) {
String duration = "";
SimpleDateFormat df = new SimpleDateFormat(<span style="font-family: SimHei;">"yyyy-MM-dd HH:mm:ss"</span><span style="font-family: SimHei;">);</span>
Date date1;
Date date2;
try {
date1 = df.parse(one);
date2 = df.parse(two);
int l = (int) ((date2.getTime() - date1.getTime()) / 1000 / 60);
if (l > 60) {
int hr = l / 60;
int min = l % 60;
duration = <span style="font-family: SimHei;">hr + "小时" + min + "分钟"</span>;
} else {
duration = <span style="font-family: SimHei;">l + "分钟";</span>
}
} catch (Exception e) {
e.printStackTrace();
}
return duration;
}
// 获取与当前时间差
public static String getcurDuration(String one) {
String duration = "";
SimpleDateFormat df = new SimpleDateFormat(<span style="font-family: SimHei;">"yyyy-MM-dd HH:mm:ss"</span>);
Date date1;
Date date2;
try {
date1 = df.parse(one);
date2 = new Date();
int l = (int) ((date2.getTime() - date1.getTime()) / 1000 / 60);
if (l > 60) {
int hr = l / 60;
int min = l % 60;
duration = <span style="font-family: SimHei;">hr + "小时" + min + "分钟"</span><span style="font-family: SimHei;">;</span>
} else {
duration =<span style="font-family: SimHei;"> l + "分钟";</span>
}
} catch (Exception e) {
e.printStackTrace();
}
return duration;
}
/**
* @return格式化当前日期和时间为字符串
*/
public static String mCurrentTime() {
SimpleDateFormat df = new SimpleDateFormat(<span style="font-family: SimHei;">"yyyy-MM-dd HH:mm:ss"</span>);
String currenttime = df.format(new Date());
return currenttime;
}
public static String parseBangTime(long time) {
MyLog.out("time==>" + time);
String timeTemp = "";
if (time < 60) {
timeTemp = time + BaseApplication.getInstance().getString(R.string.seconds_before);
} else if (time < (60 * 60)) {
timeTemp = time / 60 + BaseApplication.getInstance().getString(R.string.minutes_before);
} else if (time < (3600 * 24)) {
timeTemp = time / 3600 + BaseApplication.getInstance().getString(R.string.hour_before);
} else if (time < (60 * 60 * 24 * 30)) {
timeTemp = time / (3600 * 24) + BaseApplication.getInstance().getString(R.string.today_before);
} else {
timeTemp = time / (3600 * 24 * 30) + BaseApplication.getInstance().getString(R.string.month_before);
}
return timeTemp;
}
public static String getTimeStamp() {
SimpleDateFormat dateFormat = new SimpleDateFormat(BaseApplication.getInstance().getString(R.string.date_show_type_two));
String timeStamp = dateFormat.format(new Date());
MyLog.e("getTimeStamp=" + timeStamp);
return timeStamp;
}
public static String getCurrentDate(){
SimpleDateFormat df = new SimpleDateFormat(BaseApplication.getInstance().getString(R.string.date_show));
String currentDate = df.format(new Date());
return currentDate;
}
}
2.局部分析
2.1.字符串转化为汉字的时间

服务器返回的时间一般是一个字符串,如:2017-02-13T01:20:13.035+08:00
然后我要解析这段字符串,首先将T变成空格,然后截取前22个字符即可
然后利用SimpleDataFormat转化一下想要的格式
然后将字符串转化为Date
然后比较Dta和当前的时间差
从小到大排序:刚刚、分钟前、小时前、天前、月前、年前。
2.1.格式化字符串time

这个函数的作用也是解析一段字符串:2017-02-13T01:20:13.035+08:00
然后替换T为空格
然后截取前16个字符即可。
3.案例
3.1.写一个测试函数

当前时间为:2017-11-28 16:15
3.2.执行结果

没问题,Over!
Android 时间计算工具 通用类TimeUtil的更多相关文章
- Android随笔之——Android时间、日期相关类和方法
今天要讲的是Android里关于时间.日期相关类和方法.在Android中,跟时间.日期有关的类主要有Time.Calendar.Date三个类.而与日期格式化输出有关的DateFormat和Simp ...
- Android 时间与日期操作类
获取本地日期与时间 public String getCalendar() { @SuppressLint("SimpleDateFormat") SimpleDateFormat ...
- DataTable转任意类型对象List数组-----工具通用类(利用反射和泛型)
public class ConvertHelper<T> where T : new() { /// <summary> /// 利用反射和泛型 /// </summa ...
- jdk8 时间日期工具类(转)
package com.changfu.common.util; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import jav ...
- Java 高精度浮点数计算工具
说起编程中的高精度数值,我第一反应就是double类型了.的确,double阶码11位,尾数52位,几乎能应对任何苛刻的要求......然而,当我天真地尝试用double来算泰勒展开式的函数值,离散代 ...
- 代码片段:基于 JDK 8 time包的时间工具类 TimeUtil
摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! “知识的工作者必须成为自己时间的首席执行官.” 前言 这次泥瓦匠带来的是一个好玩的基于 JDK ...
- 时间处理工具类TimeUtil
转自:https://cnblogs.com/ityouknow/p/5662753.html 功能 Date与String之间的互相转换,以及一些特殊格式的时间字符串处理 代码 /** * 类名:T ...
- Java日期时间实用工具类
Java日期时间实用工具类 1.Date (java.util.Date) Date(); 以当前时间构造一个Date对象 Date(long); 构造函数 ...
- (转载)实例详解Android快速开发工具类总结
实例详解Android快速开发工具类总结 作者:LiJinlun 字体:[增加 减小] 类型:转载 时间:2016-01-24我要评论 这篇文章主要介绍了实例详解Android快速开发工具类总结的相关 ...
随机推荐
- Android studio 安装与配置【Android学习入门】
终于下定决心认真学习Android开发了. 之前在很多平台看到很多大牛们学习Android的经验和心得,纸上得来终觉浅. 这里推荐stormzhang老师总结的Android学习之路. 为了防止电脑卡 ...
- c#数据类型和表达式
一.数据类型 值类型: 1.整数(没有小数) Byte:字节0~255 Char:一个字符 Int 2.有小数 范围大的:double双 小范围:float单 最精确的:十进制decimal 3.bo ...
- 厌烦了写findViewById 试试ButterKnife吧
先上官网 http://jakewharton.github.io/butterknife/ 和 https://github.com/JakeWharton/butterknife 配置开发环境 ...
- mysql-5.7安装配置指导
mysql 安装 yum 安装mysql 源码编译安装mysql 通过yum安装 下载yum仓库配置安装包 MySQL Yum Repository http://dev.mysql.com/down ...
- Azure进阶攻略 | 数据库上云:零停机、自动化
小明最近挺忙,刚刚在外地找了个新工作,正在忙着搬家.多年积攒的家当很多,根本不能潇洒地「说走就走」,于是他联系了搬家公司.专业的就是不一样,不费什么事,就把所有东西打包.运输.拆包到位了.抵达新城市的 ...
- 关于Mysql中文乱码问题该如何解决(乱码问题完美解决方案)(转)
这篇文章给大家介绍关于Mysql中文乱码问题该如何解决(乱码问题完美解决方案)的相关资料,还给大家收集些关于MySQL会出现中文乱码原因常见的几点,小伙伴快来看看吧 最近两天做项目总是被乱码问题困 ...
- 怎样下载YouTube 4K视频
随着科技的进步,人们生活水平的提高,视频的清晰度也越来越高,以前那个观看模糊视频的时代已经一去不复返了.从最开始的720P和1080P高清视频,再到2K,进而到如今的4K(即3840×2160)极清视 ...
- JS正则表达式(RegExp)
字符串是编程时涉及到的最多的一种数据结构,对字符串进行操作的需求几乎无处不在.比如判断一个字符串是否是合法的Email地址,虽然可以编程提取@前后的子串,再分别判断是否是单词和域名,但这样做不但麻烦, ...
- 静态库是.o文件的集合与弱符号
静态库是.o文件的集合. 静态库与弱符号的概念相关联. 在生成库文件时,不做强符号检查.
- ABI与编译器:ABI是由内核和工具链定义和实现的
http://book.51cto.com/art/201412/460857.htm <Linux系统编程(第2版)>第1章入门和基本概念,这一章着眼于Linux系统编程的基础概念并从程 ...