美工妹子给的图如下,订单在创建时间的24小时后进行关闭
业务逻辑
从后台返回来的订单创建时间加24小时后减去你当下的时间
就是相差的总共时间,然后进行倒计时
倒计时结束后上传订单关闭标识,改变状态页
实现思路
可能在没有遇到CountDownTimer之前,我们都是创建Handle来开启异步线程来处理,如果你现在使用,我只能说太菜了,官方已经为我们封装好了一个类,爽的很,一起来看
@Override
public void initData() {
countDownTimer = new CountDownTimer(time, 1000) {
@Override
public void onTick(long millisUntilFinished) {
if (!TestActivity.this.isFinishing()) {
long day = millisUntilFinished / (1000 * 24 * 60 * 60); //单位天
long hour = (millisUntilFinished - day * (1000 * 24 * 60 * 60)) / (1000 * 60 * 60);
//单位时
long minute = (millisUntilFinished - day * (1000 * 24 * 60 * 60) - hour * (1000 * 60 * 60)) / (1000 * 60);
//单位分
long second = (millisUntilFinished - day * (1000 * 24 * 60 * 60) - hour * (1000 * 60 * 60) - minute * (1000 * 60)) / 1000;
//单位秒
textView.setText(hour + "小时" + minute + "分钟" + second + "秒");
}
}
/**
*倒计时结束后调用的
*/
@Override
public void onFinish() {
}
};
countDownTimer.start();
}
传了两个参数,第一个参数就是时间的总值,换算成毫秒值,第二个代表以毫秒来计算
两个方法:
onTick :倒计时执行的方法
onFinsh:倒计时结束后的方法
countDownTimer.start(); 开始倒计时
就是这么简单,但是两个坑,来看下
-
空指针问题
在某些场景下,CountDownTimer 会导致空指针 如果在Activity或者Fragment被回收时并未调用CountDownTimer的cancel()方法结束自己,这个时候CountDownTimer的Handler方法中如果判断到当前的时间未走完,那么会继续调用onTick方法,Activity或者Fragment已经被系统回收,从而里面的变量被设置为Null,同时,CountDownTimer中的Handler方法还在继续执行,这一块空间始终无法被系统回收也就造成了内存泄漏。
*在CountDownTimer的onTick方法中记得对当前对象做判空处理
*#####可能造成内存泄漏问题
* 记得关闭,负责内存溢出
*/
@Override
protected void onDestroy() {
super.onDestroy();
if (countDownTimer != null) {
countDownTimer.cancel();
countDownTimer = null;
}
}
干货推荐,项目中关于时间处理的Util,这篇全了
/*
*
*/
package com.wisdom.patient.utils;
import android.annotation.SuppressLint;
import android.text.TextUtils;
import android.util.Log;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;
/**
* 描述:日期处理类.
*
*/
@SuppressWarnings("all")
public class TimeUtil {
/**
* one day millisecond count
*/
public static final long ONE_DAY_MILLISECONDS = 1000 * 3600 * 24;
public static final long ONE_HOUR_MILLISECONDS = 1000 * 3600;
public static final long ONE_MIN_MILLISECONDS = 1000 * 60;
/**
* 时间日期格式化到年月日时分秒.
*/
public static String dateFormatYMDHMS = "yyyy-MM-dd HH:mm:ss";
public static String dateFormatYMDHMS_f = "yyyyMMddHHmmss";
public static String dateFormatMDHM = "MM-dd HH:mm";
public static String dateFormat = "yyyy-MM-dd HH:mm";
/**
* 时间日期格式化到年月日.
*/
public static String dateFormatYMD = "yyyy-MM-dd";
/**
* 时间日期格式化到年月日时分.中文显示
*/
public static String dateFormatYMDHMofChinese = "yyyy年MM月dd日 HH:mm";
/**
* 时间日期格式化到年月日.中文显示
*/
public static String dateFormatYMDofChinese = "yyyy年MM月dd日";
/**
* 时间日期格式化到月日.中文显示
*/
public static String dateFormatMDofChinese = "MM月dd日";
/**
* 时间日期格式化到月.中文显示
*/
public static String dateFormatMofChinese = "MM月";
/**
* 时间日期格式化到年月.
*/
public static String dateFormatYM = "yyyy-MM";
/**
* 时间日期格式化到年月日时分.
*/
public static String dateFormatYMDHM = "yyyy-MM-dd HH:mm";
/**
* 时间日期格式化到月日.
*/
public static String dateFormatMD = "MM/dd";
public static String dateFormatM_D = "MM-dd";
public static String dateFormatM = "MM月";
public static String dateFormatD = "dd";
public static String dateFormatM2 = "MM";
public static String dateFormatMDHMofChinese = "MM月dd日HH时mm分";
public static String dateFormatHMofChinese = "HH时mm分";
/**
* 时分秒.
*/
public static String dateFormatHMS = "HH:mm:ss";
/**
* 时分.
*/
public static String dateFormatHM = "HH:mm";
/**
* 上午/下午时分
*/
public static String dateFormatAHM = "aHH:mm";
public static String dateFormatYMDE = "yyyy/MM/dd E";
public static String dateFormatYMD2 = "yyyy/MM/dd";
private final static ThreadLocal dateFormater = new ThreadLocal() {
@SuppressLint("SimpleDateFormat")
@Override
protected SimpleDateFormat initialValue() {
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
}
};
@SuppressLint("SimpleDateFormat")
private final static ThreadLocal dateFormater2 = new ThreadLocal() {
@Override
protected SimpleDateFormat initialValue() {
return new SimpleDateFormat("yyyy-MM-dd");
}
};
/**
* 时间戳转特定格式时间
* @param dataFormat
* @param timeStamp
* @return
*/
public static String formatData(String dataFormat, long timeStamp) {
if (timeStamp == 0) {
return "";
}
timeStamp = timeStamp * 1000;
SimpleDateFormat format = new SimpleDateFormat(dataFormat);
return format.format(new Date(timeStamp));
}
/**
* 将毫秒转换成秒
*
* @param time
* @return
*/
public static int convertToSecond(Long time) {
Date date = new Date();
date.setTime(time);
return date.getSeconds();
}
/**
* 描述:String类型的日期时间转化为Date类型.
*
* @param strDate String形式的日期时间
* @param format 格式化字符串,如:"yyyy-MM-dd HH:mm:ss"
* @return Date Date类型日期时间
*/
public static Date getDateByFormat(String strDate, String format) {
SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat(format);
Date date = null;
try {
date = mSimpleDateFormat.parse(strDate);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
/**
* 描述:获取偏移之后的Date.
*
* @param date 日期时间
* @param calendarField Calendar属性,对应offset的值, 如(Calendar.DATE,表示+offset天,Calendar.HOUR_OF_DAY,表示+offset小时)
* @param offset 偏移(值大于0,表示+,值小于0,表示-)
* @return Date 偏移之后的日期时间
*/
public Date getDateByOffset(Date date, int calendarField, int offset) {
Calendar c = new GregorianCalendar();
try {
c.setTime(date);
c.add(calendarField, offset);
} catch (Exception e) {
e.printStackTrace();
}
return c.getTime();
}
/**
* 描述:获取指定日期时间的字符串(可偏移).
*
* @param strDate String形式的日期时间
* @param format 格式化字符串,如:"yyyy-MM-dd HH:mm:ss"
* @param calendarField Calendar属性,对应offset的值, 如(Calendar.DATE,表示+offset天,Calendar.HOUR_OF_DAY,表示+offset小时)
* @param offset 偏移(值大于0,表示+,值小于0,表示-)
* @return String String类型的日期时间
*/
public static String getStringByOffset(String strDate, String format, int calendarField, int offset) {
String mDateTime = null;
try {
Calendar c = new GregorianCalendar();
SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat(format);
c.setTime(mSimpleDateFormat.parse(strDate));
c.add(calendarField, offset);
mDateTime = mSimpleDateFormat.format(c.getTime());
} catch (ParseException e) {
e.printStackTrace();
}
return mDateTime;
}
/**
* 描述:Date类型转化为String类型(可偏移).
*
* @param date the date
* @param format the format
* @param calendarField the calendar field
* @param offset the offset
* @return String String类型日期时间
*/
public static String getStringByOffset(Date date, String format, int calendarField, int offset) {
String strDate = null;
try {
Calendar c = new GregorianCalendar();
SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat(format);
c.setTime(date);
c.add(calendarField, offset);
strDate = mSimpleDateFormat.format(c.getTime());
} catch (Exception e) {
e.printStackTrace();
}
return strDate;
}
/**
* from yyyy-MM-dd HH:mm:ss to MM-dd HH:mm
*/
public static String formatDate(String before) {
String after;
try {
Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault())
.parse(before);
after = new SimpleDateFormat("MM-dd HH:mm", Locale.getDefault()).format(date);
} catch (ParseException e) {
return before;
}
return after;
}
/**
* 描述:Date类型转化为String类型.
*
* @param date the date
* @param format the format
* @return String String类型日期时间
*/
public static String getStringByFormat(Date date, String format) {
SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat(format);
String strDate = null;
try {
strDate = mSimpleDateFormat.format(date);
} catch (Exception e) {
e.printStackTrace();
}
return strDate;
}
/**
* 描述:获取指定日期时间的字符串,用于导出想要的格式.
*
* @param strDate String形式的日期时间,必须为yyyy-MM-dd HH:mm:ss格式
* @param format 输出格式化字符串,如:"yyyy-MM-dd HH:mm:ss"
* @return String 转换后的String类型的日期时间
*/
public static String getStringByFormat(String strDate, String format) {
String mDateTime = null;
try {
Calendar c = new GregorianCalendar();
SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat(format);
c.setTime(mSimpleDateFormat.parse(strDate));
SimpleDateFormat mSimpleDateFormat2 = new SimpleDateFormat(format);
mDateTime = mSimpleDateFormat2.format(c.getTime());
} catch (Exception e) {
e.printStackTrace();
}
return mDateTime;
}
/**
* 描述:获取milliseconds表示的日期时间的字符串.
*
* @param format 格式化字符串,如:"yyyy-MM-dd HH:mm:ss"
* @return String 日期时间字符串
*/
public static String getStringByFormat(long milliseconds, String format) {
String thisDateTime = null;
try {
SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat(format);
thisDateTime = mSimpleDateFormat.format(milliseconds);
} catch (Exception e) {
e.printStackTrace();
}
return thisDateTime;
}
/**
* 描述:获取表示当前日期时间的字符串.
*
* @param format 格式化字符串,如:"yyyy-MM-dd HH:mm:ss"
* @return String String类型的当前日期时间
*/
public static String getCurrentDate(String format) {
String curDateTime = null;
try {
SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat(format);
Calendar c = new GregorianCalendar();
curDateTime = mSimpleDateFormat.format(c.getTime());
} catch (Exception e) {
e.printStackTrace();
}
return curDateTime;
}
//获取当前系统当天日期
public static String getCurrentDay() {
String curDateTime = null;
try {
SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat(dateFormat);
Calendar c = new GregorianCalendar();
c.add(Calendar.DAY_OF_MONTH, 0);
curDateTime = mSimpleDateFormat.format(c.getTime());
} catch (Exception e) {
e.printStackTrace();
}
return curDateTime;
}
//获取当前系统当天日期
public static String getCurrentDay2() {
String curDateTime = null;
try {
SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat(dateFormatYMDHMS);
Calendar c = new GregorianCalendar();
c.add(Calendar.DAY_OF_MONTH, 0);
curDateTime = mSimpleDateFormat.format(c.getTime());
} catch (Exception e) {
e.printStackTrace();
}
return curDateTime;
}
//获取当前系统前后第几天
public static String getNextDay(int i) {
String curDateTime = null;
try {
SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat(dateFormat);
Calendar c = new GregorianCalendar();
c.add(Calendar.DAY_OF_MONTH, i);
curDateTime = mSimpleDateFormat.format(c.getTime());
} catch (Exception e) {
e.printStackTrace();
}
return curDateTime;
}
//获取当前系统前后第几小时
public static String getNextHour(int i) {
String curDateTime = null;
try {
SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat(dateFormat);
Calendar c = new GregorianCalendar();
c.add(Calendar.HOUR_OF_DAY, i);
curDateTime = mSimpleDateFormat.format(c.getTime());
} catch (Exception e) {
e.printStackTrace();
}
return curDateTime;
}
/**
* 描述:获取表示当前日期时间的字符串(可偏移).
*
* @param format 格式化字符串,如:"yyyy-MM-dd HH:mm:ss"
* @param calendarField Calendar属性,对应offset的值, 如(Calendar.DATE,表示+offset天,Calendar.HOUR_OF_DAY,表示+offset小时)
* @param offset 偏移(值大于0,表示+,值小于0,表示-)
* @return String String类型的日期时间
*/
public static String getCurrentDateByOffset(String format, int calendarField, int offset) {
String mDateTime = null;
try {
SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat(format);
Calendar c = new GregorianCalendar();
c.add(calendarField, offset);
mDateTime = mSimpleDateFormat.format(c.getTime());
} catch (Exception e) {
e.printStackTrace();
}
return mDateTime;
}
/**
* 描述:计算两个日期所差的天数.
*
* @param date1 第一个时间的毫秒表示
* @param date2 第二个时间的毫秒表示
* @return int 所差的天数
*/
public static int getOffectDay(long date1, long date2) {
Calendar calendar1 = Calendar.getInstance();
calendar1.setTimeInMillis(date1);
Calendar calendar2 = Calendar.getInstance();
calendar2.setTimeInMillis(date2);
//先判断是否同年
int y1 = calendar1.get(Calendar.YEAR);
int y2 = calendar2.get(Calendar.YEAR);
int d1 = calendar1.get(Calendar.DAY_OF_YEAR);
int d2 = calendar2.get(Calendar.DAY_OF_YEAR);
int maxDays = 0;
int day = 0;
if (y1 - y2 > 0) {
maxDays = calendar2.getActualMaximum(Calendar.DAY_OF_YEAR);
day = d1 - d2 + maxDays;
} else if (y1 - y2 < 0) {
maxDays = calendar1.getActualMaximum(Calendar.DAY_OF_YEAR);
day = d1 - d2 - maxDays;
} else {
day = d1 - d2;
}
return day;
}
/**
* 描述:计算两个日期所差的小时数.
*
* @param date1 第一个时间的毫秒表示
* @param date2 第二个时间的毫秒表示
* @return int 所差的小时数
*/
public static int getOffectHour(long date1, long date2) {
Calendar calendar1 = Calendar.getInstance();
calendar1.setTimeInMillis(date1);
Calendar calendar2 = Calendar.getInstance();
calendar2.setTimeInMillis(date2);
int h1 = calendar1.get(Calendar.HOUR_OF_DAY);
int h2 = calendar2.get(Calendar.HOUR_OF_DAY);
int h = 0;
int day = getOffectDay(date1, date2);
h = h1 - h2 + day * 24;
return h;
}
/**
* 描述:计算两个日期所差的分钟数.
*
* @param date1 第一个时间的毫秒表示
* @param date2 第二个时间的毫秒表示
* @return int 所差的分钟数
*/
public static int getOffectMinutes(long date1, long date2) {
Calendar calendar1 = Calendar.getInstance();
calendar1.setTimeInMillis(date1);
Calendar calendar2 = Calendar.getInstance();
calendar2.setTimeInMillis(date2);
int m1 = calendar1.get(Calendar.MINUTE);
int m2 = calendar2.get(Calendar.MINUTE);
int h = getOffectHour(date1, date2);
int m = 0;
m = m1 - m2 + h * 60;
return m;
}
/**
* 描述:获取本周一.
*
* @param format the format
* @return String String类型日期时间
*/
public static String getFirstDayOfWeek(String format) {
return getDayOfWeek(format, Calendar.MONDAY);
}
/**
* 描述:获取本周日.
*
* @param format the format
* @return String String类型日期时间
*/
public static String getLastDayOfWeek(String format) {
return getDayOfWeek(format, Calendar.SUNDAY);
}
/**
* 描述:获取本周的某一天.
*
* @param format the format
* @param calendarField the calendar field
* @return String String类型日期时间
*/
private static String getDayOfWeek(String format, int calendarField) {
String strDate = null;
try {
Calendar c = new GregorianCalendar();
SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat(format);
int week = c.get(Calendar.DAY_OF_WEEK);
if (week == calendarField) {
strDate = mSimpleDateFormat.format(c.getTime());
} else {
int offectDay = calendarField - week;
if (calendarField == Calendar.SUNDAY) {
offectDay = 7 - Math.abs(offectDay);
}
c.add(Calendar.DATE, offectDay);
strDate = mSimpleDateFormat.format(c.getTime());
}
} catch (Exception e) {
e.printStackTrace();
}
return strDate;
}
/**
* 描述:获取本月第一天.
*
* @param format the format
* @return String String类型日期时间
*/
public static String getFirstDayOfMonth(String format) {
String strDate = null;
try {
Calendar c = new GregorianCalendar();
SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat(format);
//当前月的第一天
c.set(GregorianCalendar.DAY_OF_MONTH, 1);
strDate = mSimpleDateFormat.format(c.getTime());
} catch (Exception e) {
e.printStackTrace();
}
return strDate;
}
/**
* 描述:获取本月最后一天.
*
* @param format the format
* @return String String类型日期时间
*/
public static String getLastDayOfMonth(String format) {
String strDate = null;
try {
Calendar c = new GregorianCalendar();
SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat(format);
// 当前月的最后一天
c.set(Calendar.DATE, 1);
c.roll(Calendar.DATE, -1);
strDate = mSimpleDateFormat.format(c.getTime());
} catch (Exception e) {
e.printStackTrace();
}
return strDate;
}
/**
* 描述:获取表示当前日期的0点时间毫秒数.
*
* @return the first time of day
*/
public static long getFirstTimeOfDay() {
Date date = null;
try {
String currentDate = getCurrentDate(dateFormatYMD);
date = getDateByFormat(currentDate + " 00:00:00", dateFormatYMDHMS);
return date.getTime();
} catch (Exception e) {
}
return -1;
}
/**
* 描述:获取表示当前日期24点时间毫秒数.
*
* @return the last time of day
*/
public static long getLastTimeOfDay() {
Date date = null;
try {
String currentDate = getCurrentDate(dateFormatYMD);
date = getDateByFormat(currentDate + " 24:00:00", dateFormatYMDHMS);
return date.getTime();
} catch (Exception e) {
}
return -1;
}
/**
* 描述:判断是否是闰年()
* (year能被4整除 并且 不能被100整除) 或者 year能被400整除,则该年为闰年.
*
* @param year 年代(如2012)
* @return boolean 是否为闰年
*/
public static boolean isLeapYear(int year) {
if ((year % 4 == 0 && year % 400 != 0) || year % 400 == 0) {
return true;
} else {
return false;
}
}
/**
* 描述:根据时间返回几天前或几分钟的描述.
*
* @param strDate the str date
* @return the string
*/
public static String formatDateStr2Desc(String strDate, String outFormat) {
DateFormat df = new SimpleDateFormat(dateFormatYMDHM);
Calendar c1 = Calendar.getInstance();
Calendar c2 = Calendar.getInstance();
try {
c2.setTime(df.parse(strDate));
c1.setTime(new Date());
int d = getOffectDay(c1.getTimeInMillis(), c2.getTimeInMillis());
if (d == 0) {
int h = getOffectHour(c1.getTimeInMillis(), c2.getTimeInMillis());
if (h > 0) {
return h + "小时前";
} else if (h < 0) {
return Math.abs(h) + "小时后";
} else if (h == 0) {
int m = getOffectMinutes(c1.getTimeInMillis(), c2.getTimeInMillis());
if (m > 0) {
return m + "分钟前";
} else if (m < 0) {
return Math.abs(m) + "分钟后";
} else {
return "刚刚";
}
}
} else if (d > 0) {
if (d == 1) {
return "昨天";
} else if (d == 2) {
return "前天";
}
} else if (d < 0) {
if (d == -1) {
return "明天";
} else if (d == -2) {
return "后天";
}
return Math.abs(d) + "天后";
}
String out = getStringByFormat(strDate, outFormat);
if (!TextUtils.isEmpty(out)) {
return out;
}
} catch (Exception e) {
}
return strDate;
}
/**
* 取指定日期为星期几
*
* @param strDate 指定日期
* @param inFormat 指定日期格式
* @return String 星期几
*/
public static String getWeekNumber(String strDate, String inFormat) {
String week = "星期日";
Calendar calendar = new GregorianCalendar();
DateFormat df = new SimpleDateFormat(inFormat);
try {
calendar.setTime(df.parse(strDate));
} catch (Exception e) {
return "错误";
}
int intTemp = calendar.get(Calendar.DAY_OF_WEEK) - 1;
switch (intTemp) {
case 0:
week = "星期日";
break;
case 1:
week = "星期一";
break;
case 2:
week = "星期二";
break;
case 3:
week = "星期三";
break;
case 4:
week = "星期四";
break;
case 5:
week = "星期五";
break;
case 6:
week = "星期六";
break;
}
return week;
}
/**
* 将字符串转位日期类型
*
* @param sdate
* @return
*/
private static Date toDate(String sdate) {
try {
return dateFormater.get().parse(sdate);
} catch (ParseException e) {
return null;
}
}
/**
* 以友好的方式显示时间
*
* @param ms
* @return
*/
public static String getfriendlyTime(Long ms) {
if (ms == null) return "";
// Date time = toDate(sdate);
Date time = new Date();
time.setTime(ms);
if (time == null) {
return "Unknown";
}
String ftime = "";
Calendar cal = Calendar.getInstance();
// 判断是否是同一天
String curDate = dateFormater2.get().format(cal.getTime());
String paramDate = dateFormater2.get().format(time);
if (curDate.equals(paramDate)) {
int hour = (int) ((cal.getTimeInMillis() - time.getTime()) / 3600000);
if (hour == 0) {
if (((cal.getTimeInMillis() - time.getTime()) / 60000) < 1) {
ftime = "刚刚";
} else {
ftime = Math.max((cal.getTimeInMillis() - time.getTime()) / 60000, 1) + "分钟前";
}
} else {
ftime = hour + "小时前";
}
return ftime;
}
long lt = time.getTime() / 86400000;
long ct = cal.getTimeInMillis() / 86400000;
int days = (int) (ct - lt);
if (days == 0) {
int hour = (int) ((cal.getTimeInMillis() - time.getTime()) / 3600000);
if (hour == 0)
ftime = Math.max(
(cal.getTimeInMillis() - time.getTime()) / 60000, 1)
+ "分钟前";
else
ftime = hour + "小时前";
} else if (days == 1) {
ftime = "昨天";
} else if (days == 2) {
ftime = "前天";
} else if (days > 2 && days <= 10) {
ftime = days + "天前";
} else if (days > 10) {
ftime = dateFormater2.get().format(time);
}
return ftime;
}
/**
* 距离当前多少个小时
*
* @param dateStr
* @return
*/
@SuppressLint("SimpleDateFormat")
public static int getExpiredHour(String dateStr) {
int ret = -1;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date;
try {
date = sdf.parse(dateStr);
Date dateNow = new Date();
long times = date.getTime() - dateNow.getTime();
if (times > 0) {
ret = ((int) (times / ONE_HOUR_MILLISECONDS));
} else {
ret = -1;
}
} catch (ParseException e) {
e.printStackTrace();
}
return ret;
}
/**
* 过了多少个小时
* @param dateStr
* @return
*/
@SuppressLint("SimpleDateFormat")
public static int getExpiredHour2(String dateStr) {
int ret = -1;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date sendDate;
try {
sendDate = sdf.parse(dateStr);
Date dateNow = new Date(System.currentTimeMillis());
Log.e("JPush","date="+sendDate);
long times = dateNow.getTime() - sendDate.getTime();
Log.e("JPush","date.getTime()="+sendDate.getTime());
if (times > 0) {
ret = ((int) (times / ONE_HOUR_MILLISECONDS));
int sdqf =(int)Math.floor(times /ONE_HOUR_MILLISECONDS);
} else {
ret = -1;
}
} catch (ParseException e) {
e.printStackTrace();
}
Log.e("JPush","ret="+ret);
return ret;
}
/**
* 判断给定字符串时间是否为今日
*
* @param sdate
* @return boolean
*/
public static boolean isToday(String sdate) {
boolean b = false;
Date time = toDate(sdate);
Date today = new Date();
if (time != null) {
String nowDate = dateFormater2.get().format(today);
String timeDate = dateFormater2.get().format(time);
if (nowDate.equals(timeDate)) {
b = true;
}
}
return b;
}
/**
* 判断给定字符串时间是否为今日
*
* @param sdate
* @return boolean
*/
public static boolean isToday(long sdate) {
boolean b = false;
Date time = new Date(sdate);
Date today = new Date();
if (time != null) {
String nowDate = dateFormater2.get().format(today);
String timeDate = dateFormater2.get().format(time);
if (nowDate.equals(timeDate)) {
b = true;
}
}
return b;
}
/**
* 根据用户生日计算年龄
*/
public static int getAgeByBirthday(Date birthday) {
Calendar cal = Calendar.getInstance();
if (cal.before(birthday)) {
throw new IllegalArgumentException(
"The birthDay is before Now.It's unbelievable!");
}
int yearNow = cal.get(Calendar.YEAR);
int monthNow = cal.get(Calendar.MONTH) + 1;
int dayOfMonthNow = cal.get(Calendar.DAY_OF_MONTH);
cal.setTime(birthday);
int yearBirth = cal.get(Calendar.YEAR);
int monthBirth = cal.get(Calendar.MONTH) + 1;
int dayOfMonthBirth = cal.get(Calendar.DAY_OF_MONTH);
int age = yearNow - yearBirth;
if (monthNow <= monthBirth) {
if (monthNow == monthBirth) {
// monthNow==monthBirth
if (dayOfMonthNow < dayOfMonthBirth) {
age--;
}
} else {
// monthNow>monthBirth
age--;
}
}
return age;
}
/**
* 友好显示时间差
*
* @param diff 毫秒
* @return
*/
public static String getFriendTimeOffer(long diff) {
int day = (int) (diff / (24 * 60 * 60 * 1000));
if (day > 0)
return day + "天";
int time = (int) (diff / (60 * 60 * 1000));
if (time > 0)
return time + "小时";
int min = (int) (diff / (60 * 1000));
if (min > 0)
return min + "分钟";
int sec = (int) diff / 1000;
if (sec > 0)
return sec + "秒";
return "1秒";
}
/**
* 友好的时间间隔
*
* @param duration 秒
* @return
*/
public static String getFriendlyDuration(long duration) {
String str = "";
long tmpDuration = duration;
str += (tmpDuration / 60 > 10 ? tmpDuration / 60 : "0" + tmpDuration / 60) + ":";
tmpDuration %= 60;
str += (tmpDuration / 1 >= 10 ? tmpDuration / 1 : "0" + tmpDuration / 1);
tmpDuration %= 1;
return str;
}
/**
* 友好的时间间隔2
*
* @param duration 秒
* @return
*/
public static String getFriendlyDuration2(long duration) {
String str = "";
long tmpDuration = duration;
str += (tmpDuration / 60>0?tmpDuration / 60+"'":"");
tmpDuration %= 60;
str += (tmpDuration / 1>=10?tmpDuration / 1+"''":"0"+tmpDuration / 1+"''");
tmpDuration %= 1;
return str;
}
public static String getFriendlyMusicDuration(long duration) {
String str = "-";
int tmpDuration = (int) (duration / 1000);//秒
str += (tmpDuration / 3600 > 10 ? tmpDuration / 3600 : "0" + tmpDuration / 3600) + ":";
tmpDuration %= 3600;
str += (tmpDuration / 60 > 10 ? tmpDuration / 60 : "0" + tmpDuration / 60) + ":";
tmpDuration %= 60;
str += (tmpDuration / 1 >= 10 ? tmpDuration / 1 : "0" + tmpDuration / 1);
tmpDuration %= 1;
return str;
}
/**
* 通过日期来确定星座
*
* @param mouth
* @param day
* @return
*/
public static String getStarSeat(int mouth, int day) {
String starSeat = null;
if ((mouth == 3 && day >= 21) || (mouth == 4 && day <= 19)) {
starSeat = "白羊座";
} else if ((mouth == 4 && day >= 20) || (mouth == 5 && day <= 20)) {
starSeat = "金牛座";
} else if ((mouth == 5 && day >= 21) || (mouth == 6 && day <= 21)) {
starSeat = "双子座";
} else if ((mouth == 6 && day >= 22) || (mouth == 7 && day <= 22)) {
starSeat = "巨蟹座";
} else if ((mouth == 7 && day >= 23) || (mouth == 8 && day <= 22)) {
starSeat = "狮子座";
} else if ((mouth == 8 && day >= 23) || (mouth == 9 && day <= 22)) {
starSeat = "处女座";
} else if ((mouth == 9 && day >= 23) || (mouth == 10 && day <= 23)) {
starSeat = "天秤座";
} else if ((mouth == 10 && day >= 24) || (mouth == 11 && day <= 22)) {
starSeat = "天蝎座";
} else if ((mouth == 11 && day >= 23) || (mouth == 12 && day <= 21)) {
starSeat = "射手座";
} else if ((mouth == 12 && day >= 22) || (mouth == 1 && day <= 19)) {
starSeat = "摩羯座";
} else if ((mouth == 1 && day >= 20) || (mouth == 2 && day <= 18)) {
starSeat = "水瓶座";
} else {
starSeat = "双鱼座";
}
return starSeat;
}
/**
* 返回聊天时间
* @return
*/
public static String getChatTimeForShow(long time){
if(TimeUtil.isToday(time)){
return TimeUtil.getStringByFormat(time, TimeUtil.dateFormatHMofChinese);
}else{
return TimeUtil.getStringByFormat(time, TimeUtil.dateFormatMDHMofChinese);
}
}
/**
* 获取指定时间的毫秒值
*/
public static long getDatelongMills(String fomat,String dateStr){
SimpleDateFormat sdf = new SimpleDateFormat(fomat);
Date date = null;
try {
date = sdf.parse(dateStr);
} catch (ParseException e) {
e.printStackTrace();
}
long longDate = date.getTime();
return longDate;
}
/**
* 两个日期比较
* @param DATE1
* @param DATE2
* @return
*/
public static int compare_date(String DATE1, String DATE2) {
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm", Locale.CHINA);
try {
Date dt1 = df.parse(DATE1);
Date dt2 = df.parse(DATE2);
if (dt1.getTime() - dt2.getTime()>0) {//date1>date2
return 1;
} else {
return -1;
}
} catch (Exception exception) {
exception.printStackTrace();
}
return 0;
}
/**
*
* 给时间加几个小时
*/
public static String addDateMinut(String day, int hour){
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = null;
try {
date = format.parse(day);
} catch (Exception ex) {
ex.printStackTrace();
}
if (date == null)
return "";
System.out.println("front:" + format.format(date)); //显示输入的日期
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.HOUR, hour);// 24小时制
date = cal.getTime();
System.out.println("after:" + format.format(date)); //显示更新后的日期
cal = null;
return format.format(date);
}
}