android时间工具类,获取具体某节点的时间

import android.annotation.SuppressLint
import android.app.Activity
import android.graphics.Color
import android.os.Build
import android.text.TextUtils
import android.view.View
import android.view.Window
import android.view.WindowManager
import java.sql.Timestamp
import java.text.ParseException
import java.text.SimpleDateFormat
import java.util.*


/**
 * Copyright (C), 2020 - 2999, Sichuan Xiaoka Technology Co., Ltd.
 * @Description:
 * @Author: lch
 * @Date: 2020/6/28 11:08
 **/

@SuppressLint("SimpleDateFormat")
fun parseTime(format: String?, time: String?): Long {
    var date: Date? = null
    try {
        if (time != null) {
            date = SimpleDateFormat(format).parse(time)
        }
    } catch (e: ParseException) {
        e.printStackTrace()
    }
    return date?.time ?: System.currentTimeMillis()
}

@SuppressLint("SimpleDateFormat")
fun getTime(format: String?, time: Long): String? {
    return SimpleDateFormat(format).format(Date(time))
}

fun isExpired(savedExprieTime: Long): Boolean {
    if (savedExprieTime == 0x0L) {
        return true
    }
    val curTime =
        parseTime(
            "yyyyMMdd",
            getTime(
                "yyyyMMdd",
                System.currentTimeMillis()
            )
        )
    return if (savedExprieTime <= curTime) {
        false
    } else true
}

fun isExpired(checkTime: String?): Boolean {
    if (TextUtils.isEmpty(checkTime)) {
        return true
    }
    val time = parseTime("yyyyMMdd", checkTime)
    val now = getTime(
        "yyyyMMdd",
        System.currentTimeMillis()
    )
    val curTime = parseTime("yyyyMMdd", now)
    return if (time <= curTime) {
        false
    } else true
}

fun getTimeSpan(seconds: Int): String? {
    val buffer = StringBuilder()
    val min = seconds / 0x3c % 0x3c
    val hours = seconds / 0x3c / 0x3c % 0x3c
    val day = seconds / 0x3c / 0x3c / 0x18 % 0x18
    if (day > 0) {
        buffer.append(day.toString() + "\u5929")
    }
    if (hours > 0) {
        buffer.append(hours.toString() + "\u5c0f\u65f6")
    }
    if (min > 0) {
        buffer.append(min.toString() + "\u5206\u949f")
    }
    return buffer.toString()
}

fun getTimeFromMinutes(minutes: Int): String? {
    val buffer = StringBuilder()
    val min = minutes % 0x3c
    val hours = minutes / 0x3c % 0x3c
    if (hours > 0) {
        buffer.append(hours.toString() + "\u5c0f\u65f6")
    }
    if (min >= 0) {
        buffer.append(min.toString() + "\u5206\u949f")
    }
    return buffer.toString()
}

fun getTimeSpanSeconds(seconds: Int): String? {
    val buffer = StringBuilder()
    val sec = seconds % 0x3c
    val min = seconds / 0x3c % 0x3c
    val hours = seconds / 0x3c / 0x3c % 0x3c
    val day = seconds / 0x3c / 0x3c / 0x18 % 0x18
    if (day > 0) {
        buffer.append(day.toString() + "D")
    }
    if (hours > 0) {
        buffer.append(hours.toString() + "h")
    }
    if (min > 0) {
        buffer.append(min.toString() + "m")
    }
    if (sec >= 0) {
        buffer.append(sec.toString() + "s")
    }
    return buffer.toString()
}

fun getTimeSpanMinutes(seconds: Int): String? {
    val buffer = StringBuilder()
    val min = seconds / 0x3c % 0x3c
    val hours = seconds / 0x3c / 0x3c % 0x3c
    val day = seconds / 0x3c / 0x3c / 0x18 % 0x18
    if (day > 0) {
        buffer.append(day.toString() + "D")
    }
    if (hours > 0) {
        buffer.append(hours.toString() + "h")
    }
    if (min >= 0) {
        buffer.append(min.toString() + "m")
    }
    return buffer.toString()
}

fun getTime(date: String, hour: Int, minute: Int): Long {
    return parseTime(
        "yyyy-MM-dd HH:mm",
        date + " " + String.format("%1$,02d:%2$,02d", hour, minute)
    )
}

fun isHourValid(hour: String?): Boolean {
    if (null == hour) {
        return false
    }
    try {
        val h = hour.toInt()
        return if (h < 0 || h > 23) {
            false
        } else true
    } catch (e: Exception) {
    }
    return false
}

fun isMinuteValid(minute: String?): Boolean {
    if (null == minute) {
        return false
    }
    try {
        val m = minute.toInt()
        return if (m < 0 || m > 59) {
            false
        } else true
    } catch (e: Exception) {
    }
    return false
}

fun getNextSevenHourCalendar(): Calendar {
    val calendar = Calendar.getInstance()
    val hourOfDay = calendar[0xb]
    if (hourOfDay >= 0x7) {
        calendar[0x6] = calendar[0x6] + 0x1
    }
    calendar[0xb] = 0x7
    calendar[0xc] = 0x0
    calendar[0xd] = 0x0
    return calendar
}

fun getPreviewSevenHourCalendar(): Calendar? {
    val sevenClockCal = Calendar.getInstance()
    val hourOfDay = sevenClockCal[0xb]
    if (hourOfDay < 0x7) {
        sevenClockCal[0x6] = sevenClockCal[0x6] - 0x1
    }
    sevenClockCal[0xb] = 0x7
    sevenClockCal[0xc] = 0x0
    sevenClockCal[0xd] = 0x0
    return sevenClockCal
}

fun getNextSevenHourOfDayDelayMillis(): Long {
    val calendar = getNextSevenHourCalendar()
    return calendar.timeInMillis - System.currentTimeMillis()
}

fun convertMillisTime(millisSeconds: Long): String? {
    return convertSecondsTime(millisSeconds / 0x3e8)
}

@SuppressLint("DefaultLocale")
fun convertSecondsTime(seconds: Long): String? {
    var minute = (seconds / 0x3c).toInt()
    val hour = minute / 0x3c
    val second = (seconds % 0x3c).toInt()
    minute = minute % 0x3c
    return String.format("%02d:%02d:%02d", hour, minute, second)
}

fun converSeconds2Minutes(seconds: Int): Int {
    return seconds / 0x3c
}

fun convertMinutes2Seconds(minutes: Int): Int {
    return minutes * 0x3c
}

fun getTimeSpanMinuteSeconds(seconds: Int): String? {
    val sec = seconds % 0x3c
    val min = seconds / 0x3c
    val buffer = StringBuffer()
    buffer.append(min).append("\u5206").append(sec).append("\u79d2")
    return buffer.toString()
}

fun convertSeconds2MinutesRound(seconds: Int): Int {
    var min = seconds / 0x3c
    val sec = seconds % 0x3c
    if (sec >= 0x1e) {
        min = min + 0x1
    }
    return min
}

fun now(): String? {
    return System.currentTimeMillis().toString()
}

//获取当天的开始时间
fun getDayBegin(): Date? {
    val cal: Calendar = GregorianCalendar()
    cal[Calendar.HOUR_OF_DAY] = 0
    cal[Calendar.MINUTE] = 0
    cal[Calendar.SECOND] = 0
    cal[Calendar.MILLISECOND] = 0
    return cal.time
}

//获取当天的结束时间
fun getDayEnd(): Date? {
    val cal: Calendar = GregorianCalendar()
    cal[Calendar.HOUR_OF_DAY] = 23
    cal[Calendar.MINUTE] = 59
    cal[Calendar.SECOND] = 59
    return cal.time
}

//获取昨天的开始时间
fun getBeginDayOfYesterday(): Date? {
    val cal: Calendar = GregorianCalendar()
    cal.time = getDayBegin()
    cal.add(Calendar.DAY_OF_MONTH, -1)
    return cal.time
}

//获取昨天的结束时间
fun getEndDayOfYesterDay(): Date? {
    val cal: Calendar = GregorianCalendar()
    cal.time = getDayEnd()
    cal.add(Calendar.DAY_OF_MONTH, -1)
    return cal.time
}

//获取明天的开始时间
fun getBeginDayOfTomorrow(): Date? {
    val cal: Calendar = GregorianCalendar()
    cal.time = getDayBegin()
    cal.add(Calendar.DAY_OF_MONTH, 1)
    return cal.time
}

//获取明天的结束时间
fun getEndDayOfTomorrow(): Date? {
    val cal: Calendar = GregorianCalendar()
    cal.time = getDayEnd()
    cal.add(Calendar.DAY_OF_MONTH, 1)
    return cal.time
}

//获取本周的开始时间
fun getBeginDayOfWeek(): Date? {
    val date = Date()
    val cal = Calendar.getInstance()
    cal.time = date
    var dayofweek = cal[Calendar.DAY_OF_WEEK]
    if (dayofweek == 1) {
        dayofweek += 7
    }
    cal.add(Calendar.DATE, 2 - dayofweek)
    return getDayStartTime(cal.time)
}

//获取本周的结束时间
fun getEndDayOfWeek(): Date? {
    val cal = Calendar.getInstance()
    cal.time = getBeginDayOfWeek()
    cal.add(Calendar.DAY_OF_WEEK, 6)
    val weekEndSta = cal.time
    return getDayEndTime(weekEndSta)
}

//获取本月的开始时间
fun getBeginDayOfMonth(): Date? {
    val calendar = Calendar.getInstance()
    calendar[getNowYear()!!, getNowMonth() - 1] = 1
    return getDayStartTime(calendar.time)
}

//获取本月的结束时间
fun getEndDayOfMonth(): Date? {
    val calendar = Calendar.getInstance()
    calendar[getNowYear()!!, getNowMonth() - 1] = 1
    val day = calendar.getActualMaximum(5)
    calendar[getNowYear()!!, getNowMonth() - 1] = day
    return getDayEndTime(calendar.time)
}

//获取本年的开始时间
fun getBeginDayOfYear(): Date? {
    val cal = Calendar.getInstance()
    cal[Calendar.YEAR] = getNowYear()!!
    // cal.set
    cal[Calendar.MONTH] = Calendar.JANUARY
    cal[Calendar.DATE] = 1
    return getDayStartTime(cal.time)
}

//获取本年的结束时间
fun getEndDayOfYear(): Date? {
    val cal = Calendar.getInstance()
    cal[Calendar.YEAR] = getNowYear()!!
    cal[Calendar.MONTH] = Calendar.DECEMBER
    cal[Calendar.DATE] = 31
    return getDayEndTime(cal.time)
}

//获取某个日期的开始时间
fun getDayStartTime(d: Date?): Timestamp? {
    val calendar = Calendar.getInstance()
    if (null != d) calendar.time = d
    calendar[calendar[Calendar.YEAR], calendar[Calendar.MONTH], calendar[Calendar.DAY_OF_MONTH], 0, 0] =
        0
    calendar[Calendar.MILLISECOND] = 0
    return Timestamp(calendar.timeInMillis)
}

//获取某个日期的结束时间
fun getDayEndTime(d: Date?): Timestamp? {
    val calendar = Calendar.getInstance()
    if (null != d) calendar.time = d
    calendar[calendar[Calendar.YEAR], calendar[Calendar.MONTH], calendar[Calendar.DAY_OF_MONTH], 23, 59] =
        59
    calendar[Calendar.MILLISECOND] = 999
    return Timestamp(calendar.timeInMillis)
}

//获取今年是哪一年
fun getNowYear(): Int? {
    val date = Date()
    val gc = Calendar.getInstance() as GregorianCalendar
    gc.time = date
    return Integer.valueOf(gc[1])
}

//获取本月是哪一月
fun getNowMonth(): Int {
    val date = Date()
    val gc = Calendar.getInstance() as GregorianCalendar
    gc.time = date
    return gc[2] + 1
}

//两个日期相减得到的天数
fun getDiffDays(beginDate: Date?, endDate: Date?): Int {
    require(!(beginDate == null || endDate == null)) { "getDiffDays param is null!" }
    val diff = ((endDate.time - beginDate.time)
            / (1000 * 60 * 60 * 24))
    return diff.toInt()
}

//两个日期相减得到的毫秒数
fun dateDiff(beginDate: Date, endDate: Date): Long {
    val date1ms = beginDate.time
    val date2ms = endDate.time
    return date2ms - date1ms
}

//获取两个日期中的最大日期
fun max(beginDate: Date?, endDate: Date?): Date? {
    if (beginDate == null) {
        return endDate
    }
    if (endDate == null) {
        return beginDate
    }
    return if (beginDate.after(endDate)) {
        beginDate
    } else endDate
}

//获取两个日期中的最小日期
fun min(beginDate: Date?, endDate: Date?): Date? {
    if (beginDate == null) {
        return endDate
    }
    if (endDate == null) {
        return beginDate
    }
    return if (beginDate.after(endDate)) {
        endDate
    } else beginDate
}

//返回某月该季度的第一个月
fun getFirstSeasonDate(date: Date?): Date? {
    val SEASON = intArrayOf(1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4)
    val cal = Calendar.getInstance()
    cal.time = date
    val sean = SEASON[cal[Calendar.MONTH]]
    cal[Calendar.MONTH] = sean * 3 - 3
    return cal.time
}

//返回某个日期下几天的日期
fun getNextDay(date: Date?, i: Int): Date? {
    val cal: Calendar = GregorianCalendar()
    cal.time = date
    cal[Calendar.DATE] = cal[Calendar.DATE] + i
    return cal.time
}

//返回某个日期前几天的日期
fun getFrontDay(date: Date?, i: Int): Date? {
    val cal: Calendar = GregorianCalendar()
    cal.time = date
    cal[Calendar.DATE] = cal[Calendar.DATE] - i
    return cal.time
}

/**
 * 获取一个时间戳是星期几.
 *
 * @param calendar calendar
 * @return 该时间为星期几
 */
@SuppressLint("SwitchIntDef")
fun getWeekDay(calendar: Calendar): String? {
    var dayStr: String? = null
    val wd = calendar[Calendar.DAY_OF_WEEK]
    when (wd) {
        Calendar.MONDAY -> dayStr = "周一"
        Calendar.TUESDAY -> dayStr = "周二"
        Calendar.WEDNESDAY -> dayStr = "周三"
        Calendar.THURSDAY -> dayStr = "周四"
        Calendar.FRIDAY -> dayStr = "周五"
        Calendar.SATURDAY -> dayStr = "周六"
        Calendar.SUNDAY -> dayStr = "周日"
        else -> {
        }
    }
    return dayStr
}

/**
 * 是否是星期天
 *
 * @param year
 * @param month
 * @param day
 * @return
 */
fun isSunDay(year: Int, month: Int, day: Int): Boolean {
    val calendar = Calendar.getInstance()
    val date = Date(
        parseTime(
            "yyyy-MM-dd",
            "$year-$month-$day"
        )
    )
    calendar.time = date
    return calendar[Calendar.DAY_OF_WEEK] === Calendar.SUNDAY
}

/**
 * 是否是星期六
 *
 * @param year
 * @param month
 * @param day
 * @return
 */
fun isSaturDay(year: Int, month: Int, day: Int): Boolean {
    val calendar = Calendar.getInstance()
    val date = Date(
        parseTime(
            "yyyy-MM-dd",
            "$year-$month-$day"
        )
    )
    calendar.time = date
    return calendar[Calendar.DAY_OF_WEEK] === Calendar.SATURDAY
}

//两个日期间隔的天数
fun getDiffDays(
    startYear: Int, startMonth: Int, startDay: Int,
    endYear: Int, endMonth: Int, endDay: Int
): Long {
    val start =
        parseTime(
            "yyyy-MM-dd",
            "$startYear-$startMonth-$startDay"
        )
    val end =
        parseTime(
            "yyyy-MM-dd",
            "$endYear-$endMonth-$endDay"
        )
    return (end - start) / (24 * 60 * 60 * 1000) + 1
}

fun makeStatusBarTransparent(activity: Activity) {
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
        return
    }
    val window: Window = activity.window
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
        window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
        val option: Int = window.getDecorView()
            .getSystemUiVisibility() or View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
        window.getDecorView().setSystemUiVisibility(option)
        window.setStatusBarColor(Color.TRANSPARENT)
    } else {
        window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,544评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,430评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,764评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,193评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,216评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,182评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,063评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,917评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,329评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,543评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,722评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,425评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,019评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,671评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,825评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,729评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,614评论 2 353