Android kotlin byte轉換工具 和 時間獲取與轉換工具

Android kotlin byte轉換工具 和 獲取時間工具

代碼

byte轉換工具

import java.lang.StringBuilder

/**
 * byte 轉換工具
 * 
 * @author D10NG
 * @date on 2019-11-23 16:52
 */
object ByteUtils {

    /**
     * 檢驗校驗和
     * @param data 數據,最後一個byte爲校驗和
     */
    fun checkEndNum(data: ByteArray) : Boolean {
        var num = (0).toByte()
        for (i in 0 until data.size -1) {
            num = (num + data[i]).toByte()
        }
        return num == data[data.size -1]
    }

    /**
     * 獲取校驗和
     * @param data 數據
     */
    fun getEndNum(data: ByteArray) : Byte {
        var num = (0).toByte()
        for (element in data) {
            num = (num + element).toByte()
        }
        return num
    }

    /**
     * 將 byte 轉爲 8位二進制字符串 "00110011"
     * @param byte
     */
    fun getBinFromByte(byte: Byte) : String {
        val str = Integer.toBinaryString(byte.toInt())
        return StringUtils.upToNString(str, 8)
    }

    /**
     * 將 boolean 數組 轉換爲 byte
     * @param bools
     */
    fun getByteFromBool(vararg bools: Boolean) : Byte {
        val builder = StringBuilder()
        for (b in bools.iterator()) {
            builder.append(if (b) "1" else "0")
        }
        return getByteFromBin(builder.toString())
    }

    /**
     * 將二進制字符串 "00110011" 轉爲 byte
     * @param bin
     */
    fun getByteFromBin(bin: String) : Byte {
        val value = Integer.valueOf(bin, 2)
        return value.toByte()
    }

    /**
     * 將兩個字節的byte數組轉換成有符號整型
     * @param byte1 高位
     * @param byte2 低位
     */
    fun convertSignInt(byte1: Byte, byte2: Byte): Int =
        (byte1.toInt() shl 8) or (byte2.toInt() and 0xFF)

    /**
     * 將兩個字節的byte數組轉換成無符號整型
     * @param byte1 高位
     * @param byte2 低位
     */
    fun convertUnSignInt(byte1: Byte, byte2: Byte): Int =
        (byte1.toInt() and 0xFF) shl 8 or (byte2.toInt() and 0xFF)

    /**
     * 獲取整型數據的 高位 byte
     * @param value 整型數據
     */
    fun convertUnSignByteHeight(value: Int): Byte =
        value.ushr(8).toByte()

    /**
     * 獲取整型數據的 低位 byte
     * @param value 整型數據
     */
    fun convertUnSignByteLow(value: Int): Byte =
        (value and 0xff).toByte()
}

時間工具


import android.annotation.SuppressLint

import java.text.SimpleDateFormat
import java.util.*

/**
 * 時間工具
 *
 * @author D10NG
 * @date on 2019-10-08 11:28
 */
object DateUtils {

    /**
     * 獲取系統時間戳
     * @return
     */
    @JvmStatic
    val curTime: Long
        get() = System.currentTimeMillis()

    @JvmStatic
    val curYear: Int
        get() = Integer.parseInt(getCurDateStr("yyyy"))

    @JvmStatic
    val curMonth: Int
        get() = Integer.parseInt(getCurDateStr("MM"))

    @JvmStatic
    val curDay: Int
        get() = Integer.parseInt(getCurDateStr("dd"))

    @JvmStatic
    val curHour: Int
        get() = Integer.parseInt(getCurDateStr("HH"))

    @JvmStatic
    val curMinute: Int
        get() = Integer.parseInt(getCurDateStr("mm"))

    /**
     * 時間戳轉換成字符竄
     * @param milSecond
     * @param pattern
     * @return
     */
    @JvmStatic
    fun getDateStr(milSecond: Long, pattern: String): String {
        val date = Date(milSecond)
        @SuppressLint("SimpleDateFormat")
        val format = SimpleDateFormat(pattern, Locale.CHINESE)
        return format.format(date)
    }

    /**
     * 獲取當前時間字符串
     * @param pattern
     * @return
     */
    @JvmStatic
    fun getCurDateStr(pattern: String): String {
        return getDateStr(curTime, pattern)
    }

    /**
     * 將字符串轉爲時間戳
     * @param dateString
     * @param pattern
     * @return
     */
    @JvmStatic
    fun getDateFromStr(dateString: String, pattern: String): Long {
        @SuppressLint("SimpleDateFormat")
        val dateFormat = SimpleDateFormat(pattern)
        var date: Date? = Date()
        try {
            date = dateFormat.parse(dateString)
        } catch (e: Exception) {
            e.printStackTrace()
        }

        return date?.time ?: 0
    }

    /**
     * 根據年月日獲取時間戳
     */
    @JvmStatic
    fun getDateFromYMD(year: Int, month: Int, day: Int) : Long {
        val builder = StringBuilder()
        builder.append(StringUtils.upToNString(year.toString(), 4)).append("-")
        builder.append(StringUtils.upToNString(month.toString(), 2)).append("-")
        builder.append(StringUtils.upToNString(day.toString(), 2))
        return getDateFromStr(builder.toString(), "yyyy-MM-dd")
    }

    /**
     * 獲取指定月份的天數
     * @param year
     * @param month
     * @return
     */
    @JvmStatic
    fun getDaysOfMonth(year: Int, month: Int): Int {
        val calendar = Calendar.getInstance()
        try {
            val sdf = SimpleDateFormat("yyyy-MM-dd")
            calendar.time = sdf.parse(
                StringUtils.upToNString(year.toString() + "", 4) + "-" +
                        StringUtils.upToNString(month.toString() + "", 2) + "-01"
            )!!
        } catch (e: Exception) {
            e.printStackTrace()
        }

        return calendar.getActualMaximum(Calendar.DAY_OF_MONTH)
    }

    @JvmStatic
    fun getDateYear(time: Long): Int {
        return Integer.parseInt(getDateStr(time, "yyyy"))
    }

    @JvmStatic
    fun getDateMonth(time: Long): Int {
        return Integer.parseInt(getDateStr(time, "MM"))
    }

    @JvmStatic
    fun getDateDay(time: Long): Int {
        return Integer.parseInt(getDateStr(time, "dd"))
    }

    @JvmStatic
    fun getDateWeek(time: Long) : String {
        val cd = Calendar.getInstance(Locale.CHINESE)
        cd.time = Date(time)
        return when(cd.get(Calendar.DAY_OF_WEEK)) {
            Calendar.SUNDAY -> "星期日"
            Calendar.MONDAY -> "星期一"
            Calendar.TUESDAY -> "星期二"
            Calendar.WEDNESDAY -> "星期三"
            Calendar.THURSDAY -> "星期四"
            Calendar.FRIDAY -> "星期五"
            else -> "星期六"
        }
    }
}

完事

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章