java countdowntimer_Android 倒计时CountDownTimer[通俗易懂]

java countdowntimer_Android 倒计时CountDownTimer[通俗易懂]image.png美工妹子给的图如下,订单在创建时间的24小时后进行关闭业务逻辑从后台返回来的订单创建时间加24小时后减去你当下的时间就是相差的总共时间,然后进行倒计时倒计时结束后上传订单关闭标识,改变状态页实现思路可能在没有遇到CountDownTimer之前,我们都是创建Handle来开启异步线程来处理,如果你现在使用,我只能说太菜了,官方已经为我们封装好了一个类,爽的很,一起来看@Overr…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

b91ac97930db

image.png

美工妹子给的图如下,订单在创建时间的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);

}

}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/192060.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Vue.js学习的第一天

    Vue.js学习的第一天官网文档地址:传送门一、Vue介绍:1.Vue.js是什么?作者:2014年2月,尤雨溪曾就职于GoogleCreativeLabs和MeteorDevelopmentGroup。Vue(读音/vjuː/,类似于view)是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue被设计为可以自底向上逐层应用。Vue的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vu..

  • 链表排序java_java有序链表

    链表排序java_java有序链表这是自己的第一篇博客,话说学习是50%的学习,另外50%是解释,以后会分享自己遇到的一些问题,欢迎各位大佬指教。第一篇对象数组排序的问题处理。..

    2022年10月11日
  • DEDECMS去掉自动生成首页或栏目后面带的index.html

    DEDECMS去掉自动生成首页或栏目后面带的index.html

  • 小白入门NAS—快速搭建私有云教程系列(一)[通俗易懂]

    小白入门NAS—快速搭建私有云教程系列(一)[通俗易懂]什么是NAS在日常的工作生活中,我们有大量的资料、文件需要存储在电脑或者其他终端设备中,但是这种方式需要电脑配备高容量的硬盘,而且需要随时随地的带着,这样是不是很麻烦?那么,今天,我来介绍一种家庭私有云—NAS,通过NAS,我们可以随时随地的通过网页端的方式去访问我们已经存储在NAS里面的文件。那么,什么是NAS?我们先来看下官方一点的回答。NAS(NetworkAttachedSt…

  • java销毁定时器_Java 定时器退出解决方案

    java销毁定时器_Java 定时器退出解决方案项目中用到了Timer每隔一段时间进行一些操作,现在发现有时候莫名其妙地挂在这个计时器上的操作都不做了,用“JConsole”查看其中的线程以后,发现这个定时器线程也不在了(定时器创建的时候带了名字Timertimer=newTimer(“MyTimer”),所以直接能看到),由于日志太多,之前的日志已经找不到了,所以没有办法看是否是有异常发生以及发生在哪里。初步估计,是不是由于T…

  • 不同组织的窗宽窗位

    不同组织的窗宽窗位头颅,脑组织:窗宽设定为80Hu~100Hu,窗位为30Hu~40Hu,垂体及蝶鞍区病:变窗宽宜设在200Hu~250Hu,窗位45Hu~50Hu,脑出血患者可改变:窗宽位80Hu~140Hu,窗位30Hu~50Hu,脑梗死患者:常用窄窗60Hu,能提高病灶的检出率,清楚显示梗死及软化灶,颌面部眼眶:窗宽定为150Hu~250Hu,窗位30Hu~40Hu,…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号