目录
2.4 获取两个时间Millis的时间差,差值形式以分钟返回
2.5 获取给定时长(Millis)的字符串表示,用于计算音视频时长(1)
2.6 获取给定时长(Millis)的字符串表示,用于计算音视频时长(2)
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