字符串时间转时分、昨天、前天、星期、月日、年月日

需要按照需求这样显示时间

今天:时分

昨天:昨天

前天:前天

一星期内:除去前三个,其他显示星期

今年内:显示月日

今年以前:显示年月日

讲道理,这活应该是后端干的,前端只负责显示数据。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")

里面代码应该大部分格式都包含了,如果不能复用,可以自行修改 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值