Android 常用时间工具类总结

目录

1.背景

2.代码

    2.1 获取当前系统时间

    2.2 将当前时间(或给定时间Millis)转换成字符串

    2.3 将给定时间的字符串转换成Millis

    2.4 获取两个时间Millis的时间差,差值形式以分钟返回

    2.5 获取给定时长(Millis)的字符串表示,用于计算音视频时长(1)

    2.6 获取给定时长(Millis)的字符串表示,用于计算音视频时长(2)

3.总结


1.背景

    总会遇到各种各样的时间计算,或是时间millis与String的转换,或是将播放音乐,视频的时长转换成字符串的操作,至今也没找到一个称心如意的工具类,所以记录一下自己常用的,避免以后无头苍蝇一样的乱找。

2.代码

    这是我以下固定格式的DateFormat,以及固定的常量

private static final DateFormat DEFAULT_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault());

/**
 * 毫秒与毫秒的倍数
 */
public static final int MSEC = 1;
/**
 * 秒与毫秒的倍数
 */
public static final int SEC  = 1000;
/**
 * 分与毫秒的倍数
 */
public static final int MIN  = 60000;
/**
 * 时与毫秒的倍数
 */
public static final int HOUR = 3600000;
/**
 * 天与毫秒的倍数
 */
public static final int DAY  = 86400000;

    2.1 获取当前系统时间

long currTimeLong = System.currentTimeMillis();

    2.2 将当前时间(或给定时间Millis)转换成字符串


public static String millis2String(final long millis) {
        return millis2String(millis, DEFAULT_FORMAT);
    }
public static String millis2String(final long millis, final DateFormat format) {
        return format.format(new Date(millis));
    }

// long转换成字符串
String convertSelectTimeStr = millis2String(System.currentTimeMillis());

    2.3 将给定时间的字符串转换成Millis

    /**
     * 将时间字符串转为时间戳
     * <p>time格式为yyyy-MM-dd HH:mm:ss</p>
     *
     * @param time 时间字符串
     * @return 毫秒时间戳
     */
    public static long string2Millis(final String time) {
        return string2Millis(time, DEFAULT_FORMAT);
    }
   /**
     * 将时间字符串转为时间戳
     * <p>time格式为format</p>
     *
     * @param time   时间字符串
     * @param format 时间格式
     * @return 毫秒时间戳
     */
    public static long string2Millis(final String time, final DateFormat format) {
        try {
            return format.parse(time).getTime();
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return -1;
    }
// 给定的时间
String selectTimeStr = "2020-04-20 23:59:59";

// 给定时间转换成millis
long selectTimeLong = string2Millis(selectTimeStr);

    2.4 获取两个时间Millis的时间差,差值形式以分钟返回

public static long getTimeSpan(final long millis0, final long millis1, final int unit) {
        return millis2TimeSpan(Math.abs(millis0 - millis1), unit);
    }
	
private static long millis2TimeSpan(final long millis, final int unit) {
	return millis / unit;
}

/**
* 获取两个时间的时间差
* 转换成分钟返回(可指定)
*/
long timeSpanMinLong = getTimeSpan(currTimeLong, selectTimeLong, MIN);
System.out.println("timeSpanMinLong = " + timeSpanMinLong);

    2.5 获取给定时长(Millis)的字符串表示,用于计算音视频时长(1)

/**
 * 法一:
 * 给定音乐时长,转换成分钟返回
 * 将 234736 转化为分钟和秒应为 03:54
 */
long musicDuration = 234736;
DateFormat musicDateFormart = new SimpleDateFormat("mm:ss");
String musicDurationstr = millis2String(musicDuration, musicDateFormart);
System.out.println("musicDurationstr = " + musicDurationstr);

    注意,此方法只针对于,不超过一小时的时长,如果超过一小时,需要处理时区,需要减掉8小时即可

    2.6 获取给定时长(Millis)的字符串表示,用于计算音视频时长(2)

/**
 * 将当前时间转换成系统时间
 * @param ms
 * @return
 */
public static String formatDuring(long ms) {
	long hours = ((ms) % (24 * 60 * 60 * 1000)) / (60 * 60 * 1000);
	long minutes = (ms % (60 * 60 * 1000)) / (60 * 1000);
	long sec = (ms % (60 * 1000)) / 1000;

	String hoursStr = hours + "";
	if (hours < 10) {
		hoursStr = "0" + hours;
	}
	String minutesStr = minutes + "";
	if (minutes < 10) {
		minutesStr = "0" + minutes;
	}
	String secStr = sec + "";
	if (sec < 10) {
		secStr = "0" + sec;
	}

	return hoursStr + ":" + minutesStr + ":" + secStr;
}

// 转换音视频时长
long musicDuration = 234736;
String formatStr = formatDuring(musicDuration);

    如果需要用formatDuring来格式化当前时间而非时长,需要修改第一句代码,处理时区,这样展示的时间才是对的:

        long hours = ((ms + 28800000) % (24 * 60 * 60 * 1000)) / (60 * 60 * 1000);

3.总结

    以后用到的代码还会继续更新,目前这些是我常用的代码,记录一下,方便查找。

参考:

    1.https://blankj.com/ 写了很多工具类,很全面,可探索使用

    2.https://blog.csdn.net/zhuyu19911016520/article/details/53698035?locationNum=10&fps=1

原创文章 25 获赞 19 访问量 2万+

猜你喜欢

转载自blog.csdn.net/HeartCircle/article/details/105629912
今日推荐