需要按照需求这样显示时间
今天:时分
昨天:昨天
前天:前天
一星期内:除去前三个,其他显示星期
今年内:显示月日
今年以前:显示年月日
讲道理,这活应该是后端干的,前端只负责显示数据。web先行,让后端加,就说web端已经这样做了。对接就离了大谱
做吧。。。。
后台给了一串时间字符串
"2024-07-27 08:36:48"
代码:
import java.text.SimpleDateFormat
import java.util.Calendar
import java.util.Date
object DateUtils {
private var nowCalendar: Calendar = Calendar.getInstance().apply {
this.time = Date(System.currentTimeMillis())
}//初始化当前时间到日历
private val daysOfWeek = arrayOf(
"星期日",
"星期一",
"星期二",
"星期三",
"星期四",
"星期五",
"星期六"
)//星期日是一周的第一天
fun timeConvert(dateString: String): String {
var timeResult = ""//返回的结果
val timeCalendar: Calendar = Calendar.getInstance()
val date = defaultDateFormat.get().parse(dateString)
timeCalendar.time = date//初始化目标时间到日历
if (timeCalendar.get(Calendar.YEAR) === nowCalendar.get(Calendar.YEAR)) {
//是今年
timeResult = returnResult(timeCalendar)
} else {
//不是今年
timeResult = YHMDateFormat.get().format(timeCalendar.time)
}
return timeResult
}
/***
* 时间格式"yyyy-MM-dd HH:mm:ss"
* (初始化时间使用)
*/
private val defaultDateFormat: ThreadLocal<SimpleDateFormat> =
object : ThreadLocal<SimpleDateFormat>() {
override fun initialValue(): SimpleDateFormat {
return SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
}
}
/***
* 时间格式"yyyy-MM-dd"
* (不是今年使用)
*/
private val YHMDateFormat: ThreadLocal<SimpleDateFormat> =
object : ThreadLocal<SimpleDateFormat>() {
override fun initialValue(): SimpleDateFormat {
return SimpleDateFormat("yyyy-MM-dd")
}
}
/***
* 时间格式"MM-dd"
* (本周之前使用)
*/
private val MDDateFormat: ThreadLocal<SimpleDateFormat> =
object : ThreadLocal<SimpleDateFormat>() {
override fun initialValue(): SimpleDateFormat {
return SimpleDateFormat("MM-dd")
}
}
/***
* 时间格式"HH:mm"
* (今天使用)
*/
private val HMDateFormat: ThreadLocal<SimpleDateFormat> =
object : ThreadLocal<SimpleDateFormat>() {
override fun initialValue(): SimpleDateFormat {
return SimpleDateFormat("HH:mm")
}
}
private fun returnResult(timeCalendar: Calendar): String{
//当前时间在今年中是第几周
val nowDayOfWeek: Int = nowCalendar.get(Calendar.WEEK_OF_YEAR)
//目标时间在今年中是第几周
val timeDayOfWeek: Int = timeCalendar.get(Calendar.WEEK_OF_YEAR)
if (nowDayOfWeek == timeDayOfWeek) {//目标时间是否在本周
return when ((nowCalendar.get(Calendar.DAY_OF_YEAR) - timeCalendar.get(Calendar.DAY_OF_YEAR))){
//当前时间是今年中第几天,减去,目标时间是今年第几天
0 -> HMDateFormat.get().format(timeCalendar.time)//当天
1 -> "昨天"
2 -> "前天"
else -> daysOfWeek[/*目标时间在本周是第几天*/timeCalendar.get(Calendar.DAY_OF_WEEK) - 1]//返回星期
}
} else {
//不在本周,显示月日
return MDDateFormat.get().format(timeCalendar.time)
}
}
}
使用
DateUtils.timeConvert("2024-07-27 08:36:48")
里面代码应该大部分格式都包含了,如果不能复用,可以自行修改