Android 时间差的处理及AM&PM判断

199 阅读1分钟

关于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)
    }

\