Java仿微信时间显示

需求

微信聊天消息时间显示说明
1、当天的消息,以每5分钟为一个跨度的显示时间;
2、消息超过1天、小于1周,显示星期+收发消息的时间;
3、消息大于1周,显示手机收发时间的日期。

考虑了一下,需求变更如下:

  1. 当天跨度为5分钟
  2. 当天之前的跨度统一10分钟

效果类似下图:
在这里插入图片描述

代码实现

1.dto类设计

数据库实际仅用一个字段存储时间:

LocalDateTime createTime

为了便于之后的跨度计算加上几个辅助字段,这些字段不存入数据库,所以只写在dto类中,而不是entity类中。
相关字段如下

    //消息实际发送时间
    private LocalDateTime createTime;
    //格式化时间
    private String dealTime;
    //用于格式化时间的分组
    // 5:今天  4:昨天  3:一周以内  2:月  1:年
    private Byte flagTime;
    //消息间每隔一个时间跨度存放一次,也是最后要取的时间值
    private String resultTime;

2.controller层

public PageResponse<PrivateMessageDTO> getDetailPrivateLetterByTime(@RequestBody @Validated PageQuery<PrivateMessageDTO> request) {
   
        //此处用户获取用户的消息记录
        PageResponse<PrivateMessageDTO> page = privateMessageService.getDetailPrivateLetter(request);
        //对消息记录的时间进行处理
        return  privateMessageService.getDetailPrivateLetterByTime(page);
    }

3.service层

    // 时间处理函数
    @Override
    public PageResponse<PrivateMessageDTO> getDetailPrivateLetterByTime(PageResponse<PrivateMessageDTO> request) {
   
        List<PrivateMessageDTO> list = request.getListData();
        for(PrivateMessageDTO temp:list){
   
            //时间格式化处理,如 将2000-01-01 12:00:00 转换成 年月日的格式
            //getTimeString 时间格式化函数,之后会给出代码
            String result = getTimeString(temp.getCreateTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli());
            //对时间进行标记,为消息做一个归类
            //比如 消息发送时间在昨天以前,又在一周以内的归到一组中
            // 5:今天  4:昨天  3:一周以内  2:月  1:年
            if(result.contains("年")){
   
                temp.setFlagTime((byte) 1);
            }else if(result.contains("月")){
   
                temp.setFlagTime((
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值