• 神奇的【时间】问题


    偶现的问题

    系统当前有一个会员到期提醒的功能。功能做的比较 low, 临近到期 7 天提醒一次,3 天提醒一次。 只在用户那天第一次登录的时候提醒一下。

    但是偶尔会有反馈说少一次提醒,要么7天没提醒,要么3天的没提醒。 反馈完,第二天 测试同学 拿到问题去验证又没问题。

    客户买会员至少都是年度的。这个操作实现太低频了,所以虽然时有反馈,但一直没关注。

    直到这次,客户的 7 天提醒和 3 天提醒都没有。 然后直接把客户的会员给断了 。 客户很怒啊!

    问题

    客户爸爸很生气, 说确实没收到提醒 。 第二天, 测试同学一上午都复现不出来 。 一头雾水的时候。 吃完饭 , 下午问题出现了。

    上午的时候,每次测试都会有提醒,无比正常 。

    下午的时候每次测试都没有提醒 , 无比的异常!。 诡异啊!

    然后回想问题,好像每次都是客户反馈完,第二天上午去复现问题 , 然后无比的正常。T - T

    而恰好 , 客户 7 天及之后的那几天 , 都是在下午才登录 。下午就没有提醒。

    代码逻辑

    表现显示,应该是时间判断的问题。时间判断的伪代码:

    ....
    long now = System.currentTimeMillis();  //当前时间
    long expire = user.getExpire(); // 用户的过期时间的时间戳,是过期那天 23:59:59.999的时间戳
    
    .....
    
    //重点逻辑
    //获取 7 天后的最后时间
    long nDayAfter = getEndTimeDaysAfter(now,7); // 7 天和 3 天是一样的逻辑
    //判断时间
    if(expire == nDayAfter){
        //去提醒
    } else{
        //没有提醒
    }
    
    ........
    
    //获取 N 天后的最后时间
    public long getEndTimeDaysAfter(long time, int days) {
        Calendar calendar = GregorianCalendar.getInstance();
        calendar.setTimeInMillis(time);
        calendar.add(Calendar.DATE, days);
        calendar.set(Calendar.HOUR, 23);
        calendar.set(Calendar.MINUTE, 59);
        calendar.set(Calendar.SECOND, 59);
        calendar.set(Calendar.MILLISECOND, 999);
        return calendar.getTimeInMillis();
    }
    
    
    

    就这么一块代码逻辑 , 上午就对的,下午就不对!!

    眼尖的同学可能已经发现问题了 。 没错, 就是下面这行逻辑的问题:

    calendar.set(Calendar.HOUR, 23); // 这个 HOUR 是12小时制的。
    

    上午时间设置 23 ,得到的是 23点这个时间 。

    下午时间设置 23 , 得到的是 第二天 的上午 11点的时间。

    这个具体可以看: Calendar.HOUR 和 Calendar.HOUR_OF_DAY

    不知道当时写代码的人还活着不? 活着的话得好好上上课。


    如果文章有帮助到您,请点个赞,您的反馈会让我感到文章是有价值的

  • 相关阅读:
    快速理解Kafka分布式消息队列框架
    消息系统Kafka介绍
    使用Maven+Nexus+Jenkins+Svn+Tomcat+Sonar搭建持续集成环境
    CSS学习笔记(10)--nth-child和nth-of-type
    CSS学习笔记(9)--详解CSS中:nth-child的用法
    CSS学习笔记(8)--纯CSS绘制三角形(各种角度)
    CSS学习笔记(7)--html页面的CSS、DIV命名规则
    CSS学习笔记(6)--浮动,三列布局,高度宽度自适应
    CSS学习笔记(5)--导航ul,li浮动问题
    Git中保存用户名和密码
  • 原文地址:https://www.cnblogs.com/ElEGenT/p/13323191.html
Copyright © 2020-2023  润新知