日期相关util
This commit is contained in:
parent
086bb93212
commit
2aea918304
|
|
@ -0,0 +1,159 @@
|
||||||
|
package com.ama.core.architecture.util
|
||||||
|
|
||||||
|
|
||||||
|
import java.text.SimpleDateFormat
|
||||||
|
import java.util.*
|
||||||
|
import java.util.concurrent.TimeUnit
|
||||||
|
|
||||||
|
|
||||||
|
object DateUtil {
|
||||||
|
private const val FORMAT_DATE = "yyyy-MM-dd"
|
||||||
|
private const val FORMAT_DATETIME = "yyyy-MM-dd HH:mm:ss"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
fun getCurrentDateTime(format: String = FORMAT_DATETIME): String {
|
||||||
|
return SimpleDateFormat(format, Locale.getDefault()).format(Date())
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
fun timestampToDate(timestamp: Long, format: String = FORMAT_DATE): String {
|
||||||
|
return SimpleDateFormat(format, Locale.getDefault()).format(Date(timestamp))
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
fun stringToDate(dateString: String, format: String = FORMAT_DATE): Date? {
|
||||||
|
return try {
|
||||||
|
SimpleDateFormat(format, Locale.getDefault()).parse(dateString)
|
||||||
|
} catch (e: Exception) {
|
||||||
|
e.printStackTrace()
|
||||||
|
null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
fun convertDateFormat(dateString: String, fromFormat: String, toFormat: String): String {
|
||||||
|
return try {
|
||||||
|
val date = SimpleDateFormat(fromFormat, Locale.getDefault()).parse(dateString)
|
||||||
|
SimpleDateFormat(toFormat, Locale.getDefault()).format(date)
|
||||||
|
} catch (e: Exception) {
|
||||||
|
e.printStackTrace()
|
||||||
|
dateString
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 给定时间是否超过指定周期
|
||||||
|
*/
|
||||||
|
fun isPeriodExpired(targetTime: Any, period: Long, timeUnit: TimeUnit): Boolean {
|
||||||
|
val targetTimestamp = when (targetTime) {
|
||||||
|
is Long -> targetTime
|
||||||
|
is Date -> targetTime.time
|
||||||
|
is String -> stringToTimestamp(targetTime) ?: 0L
|
||||||
|
else -> 0L
|
||||||
|
}
|
||||||
|
|
||||||
|
if (targetTimestamp == 0L) return false
|
||||||
|
|
||||||
|
val currentTime = System.currentTimeMillis()
|
||||||
|
val periodMillis = timeUnit.toMillis(period)
|
||||||
|
|
||||||
|
return currentTime - targetTimestamp > periodMillis
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 从起始时间到现在已经过去多少天
|
||||||
|
*/
|
||||||
|
fun getDaysPassed(startTime: Any): Long {
|
||||||
|
val startTimestamp = when (startTime) {
|
||||||
|
is Long -> startTime
|
||||||
|
is Date -> startTime.time
|
||||||
|
is String -> stringToTimestamp(startTime) ?: 0L
|
||||||
|
else -> 0L
|
||||||
|
}
|
||||||
|
|
||||||
|
if (startTimestamp == 0L) return 0L
|
||||||
|
|
||||||
|
val currentTime = System.currentTimeMillis()
|
||||||
|
val diffMillis = currentTime - startTimestamp
|
||||||
|
|
||||||
|
return TimeUnit.MILLISECONDS.toDays(diffMillis)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 两个时间点之间的天数差
|
||||||
|
*/
|
||||||
|
fun getDaysBetween(startTime: Any, endTime: Any): Long {
|
||||||
|
val startTimestamp = convertToTimestamp(startTime)
|
||||||
|
val endTimestamp = convertToTimestamp(endTime)
|
||||||
|
|
||||||
|
if (startTimestamp == 0L || endTimestamp == 0L) return 0L
|
||||||
|
|
||||||
|
val diffMillis = endTimestamp - startTimestamp
|
||||||
|
return TimeUnit.MILLISECONDS.toDays(diffMillis)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 判断今天是否是特定日期
|
||||||
|
*/
|
||||||
|
fun isToday(targetTime: Any): Boolean {
|
||||||
|
val targetDate = when (targetTime) {
|
||||||
|
is Long -> Date(targetTime)
|
||||||
|
is Date -> targetTime
|
||||||
|
is String -> stringToDate(targetTime)
|
||||||
|
else -> null
|
||||||
|
}
|
||||||
|
|
||||||
|
return targetDate?.let { isSameDay(it, Date()) } ?: false
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 两个日期是否是同一天
|
||||||
|
*/
|
||||||
|
fun isSameDay(date1: Date, date2: Date): Boolean {
|
||||||
|
val cal1 = Calendar.getInstance().apply { time = date1 }
|
||||||
|
val cal2 = Calendar.getInstance().apply { time = date2 }
|
||||||
|
|
||||||
|
return cal1.get(Calendar.YEAR) == cal2.get(Calendar.YEAR) &&
|
||||||
|
cal1.get(Calendar.MONTH) == cal2.get(Calendar.MONTH) &&
|
||||||
|
cal1.get(Calendar.DAY_OF_MONTH) == cal2.get(Calendar.DAY_OF_MONTH)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 在指定日期上添加天数
|
||||||
|
*/
|
||||||
|
fun addDays(date: Date, days: Int): Date {
|
||||||
|
val cal = Calendar.getInstance().apply { time = date }
|
||||||
|
cal.add(Calendar.DAY_OF_MONTH, days)
|
||||||
|
return cal.time
|
||||||
|
}
|
||||||
|
|
||||||
|
fun getFirstDayOfMonth(date: Date = Date()): Date {
|
||||||
|
val cal = Calendar.getInstance().apply { time = date }
|
||||||
|
cal.set(Calendar.DAY_OF_MONTH, 1)
|
||||||
|
return cal.time
|
||||||
|
}
|
||||||
|
|
||||||
|
fun getLastDayOfMonth(date: Date = Date()): Date {
|
||||||
|
val cal = Calendar.getInstance().apply { time = date }
|
||||||
|
cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH))
|
||||||
|
return cal.time
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// 私有工具方法
|
||||||
|
private fun stringToTimestamp(dateString: String, format: String = FORMAT_DATE): Long? {
|
||||||
|
return stringToDate(dateString, format)?.time
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun convertToTimestamp(time: Any): Long {
|
||||||
|
return when (time) {
|
||||||
|
is Long -> time
|
||||||
|
is Date -> time.time
|
||||||
|
is String -> stringToTimestamp(time) ?: 0L
|
||||||
|
else -> 0L
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue