关于Android 时间差的处理及AM&PM判断
直接上代码
/**
* 通过Calendar获取时间差
* @param startTime
* @param endTime
* 默认 endTime > startTime
*/
fun timeDifferenceByCalendar(startTime: Long, endTime: Long): Set<Int> {
val calendar1 = Calendar.getInstance()
val calendar2 = Calendar.getInstance()
calendar1.timeInMillis = startTime
calendar2.timeInMillis = endTime
val year = calendar2.get(Calendar.YEAR) - calendar1.get(Calendar.YEAR)
// 注意跨年
val month = calendar2.get(Calendar.MONTH) + year * 12 - calendar1.get(Calendar.MONTH)
val day = calendar2.get(Calendar.DAY_OF_YEAR) - calendar1.get(Calendar.DAY_OF_YEAR)
val minute = calendar2.get(Calendar.MINUTE) - calendar1.get(Calendar.MINUTE)
val second = calendar2.get(Calendar.SECOND) - calendar1.get(Calendar.SECOND)
return setOf(year, month, day, minute, second)
}
/**
* 通过Period获取时间差,只能获取年月日
* @param startTime
* @param endTime
* 默认 endTime > startTime
*/
@RequiresApi(Build.VERSION_CODES.O)
fun timeDifferenceByPeriod(startTime: Long, endTime: Long): Set<Int> {
val calendar1 = Calendar.getInstance()
val calendar2 = Calendar.getInstance()
calendar1.timeInMillis = startTime
calendar2.timeInMillis = endTime
val localTime1 = LocalDate.of(calendar1.get(Calendar.YEAR), calendar1.get(Calendar.MONTH), calendar1.get(Calendar.DAY_OF_MONTH))
val localTime2 = LocalDate.of(calendar2.get(Calendar.YEAR), calendar2.get(Calendar.MONTH), calendar2.get(Calendar.DAY_OF_MONTH))
val period = Period.between(localTime1, localTime2)
val year = period.years
val month = period.months
val day = period.days
return setOf(year, month, day)
}
/**
* 通过ChronoUnit获取时间差,只能获取年月日
* @param startTime
* @param endTime
* 默认 endTime > startTime
*/
@RequiresApi(Build.VERSION_CODES.O)
fun timeDifferenceByChronoUnit(startTime: Long, endTime: Long): Set<Long> {
val calendar1 = Calendar.getInstance()
val calendar2 = Calendar.getInstance()
calendar1.timeInMillis = startTime
calendar2.timeInMillis = endTime
val localTime1 = LocalDateTime.of(calendar1.get(Calendar.YEAR), calendar1.get(Calendar.MONTH), calendar1.get(Calendar.DAY_OF_MONTH), calendar1.get(Calendar.HOUR), calendar1.get(Calendar.MINUTE), calendar1.get(Calendar.SECOND))
val localTime2 = LocalDateTime.of(calendar2.get(Calendar.YEAR), calendar2.get(Calendar.MONTH), calendar2.get(Calendar.DAY_OF_MONTH), calendar2.get(Calendar.HOUR), calendar2.get(Calendar.MINUTE), calendar2.get(Calendar.SECOND))
val year = ChronoUnit.YEARS.between(localTime1, localTime2)
val month = ChronoUnit.MONTHS.between(localTime1, localTime2)
val day = ChronoUnit.DAYS.between(localTime1, localTime2)
val hour = ChronoUnit.HOURS.between(localTime1, localTime2)
val minute = ChronoUnit.MINUTES.between(localTime1, localTime2)
val second = ChronoUnit.SECONDS.between(localTime1, localTime2)
return setOf(year, month, day, hour, minute, second)
}
/**
* 通过除法获取时间差,只能获取日时分秒差
* @param startTime
* @param endTime
* 默认 endTime > startTime
*/
@RequiresApi(Build.VERSION_CODES.O)
fun timeDifferenceDefault(startTime: Long, endTime: Long): Set<Long> {
val day = ((endTime - startTime) / (1000 * 60 * 60 * 24))
val hour = ((endTime - startTime) / (1000 * 60 * 60 ))
val minute = ((endTime - startTime) / (1000 * 60))
val second = ((endTime - startTime) / 1000)
return setOf(day, hour, minute, second)
}
/**
* 判断某个时间是AM/PM
*/
fun checkTimeAM(timeStamp: Long): Int {
val calendar = GregorianCalendar()
calendar.timeInMillis = timeStamp
return calendar[GregorianCalendar.AM_PM]
}
/**
* 得到包含AM/PM的时间
*/
fun getTimeIncludeAM(timeStamp: Long): String {
val date = Date(timeStamp)
val formatter = SimpleDateFormat("hh.mm a")
return formatter.format(date)
}
/**
* 修改AM/PM 文字
*/
fun updateTimeAm(timeStamp: Long): String {
val symbols = DateFormatSymbols()
val modifiedAmPm = arrayOf("上午", "下午")
symbols.amPmStrings = modifiedAmPm
val date = Date(timeStamp)
val formatter = SimpleDateFormat("hh.mm a", symbols)
return formatter.format(date)
}
\