美文网首页
java-时间控件一些经验

java-时间控件一些经验

作者: go_2021 | 来源:发表于2021-12-31 12:01 被阅读0次

故事的六要素,就是时间,地点,人物,事件,观点,感悟。
铺排好这六要素,就是构成故事的基本原理。
如果想讲好故事,可以从这6要素开始。

时间控件感觉比较简单的,但是会有些容易出问题的地方,记录下自己一些经验:

1. 和mysql交互时指定微秒

系统之间接口回调,失败重试时,会在表里记录下一个重试时间,每个5分钟检查下,有没法的就重发。因为存的时候和取的时候都没有加微秒,测试服是正常,但是到线上就出问题了,存的时候指定微秒,取的时候也指定即可。

 Calendar calendar1 = Calendar.getInstance();
        calendar1.set(Calendar.SECOND, 0);
        //需要制定微秒 要不可能会查不到  测试服没问题 但是到了线上sql就加上
        calendar1.set(Calendar.MILLISECOND, 0); 
        Date time = calendar1.getTime();
image.png
2. 计算指定日期是年的第几周
自然周:周跨年时,根据这个周的周四是哪一年的来判断是属于哪一年。
    static int dateWeek(Date date) {
        LocalDateTime localDateTime = date.toInstant()
                .atZone(ZoneId.systemDefault())
                .toLocalDateTime();
        WeekFields weekFields = WeekFields.of(DayOfWeek.MONDAY, 4);
        return localDateTime.get(weekFields.weekOfWeekBasedYear());
    }
3. 计算用户生日还差几天

库里存的dateTime,本来想用sql来实现,感觉写的比较费劲,还是较少mysql的一些压力吧,java判断。

SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd");
            Calendar cToday = Calendar.getInstance(); // 存今天
            Calendar cBirth = Calendar.getInstance(); // 存生日
            cBirth.setTime(myFormatter.parse(birthday)); // 设置生日
            cBirth.set(Calendar.YEAR, cToday.get(Calendar.YEAR)); // 修改为本年
            if (cBirth.get(Calendar.DAY_OF_YEAR) < cToday.get(Calendar.DAY_OF_YEAR)) {
                // 生日已经过了,要算明年的了
                days = cToday.getActualMaximum(Calendar.DAY_OF_YEAR) - cToday.get(Calendar.DAY_OF_YEAR);
                days += cBirth.get(Calendar.DAY_OF_YEAR);
            } else {
                // 生日还没过
                days = cBirth.get(Calendar.DAY_OF_YEAR) - cToday.get(Calendar.DAY_OF_YEAR);
            }
4. update字段

对于更新记录时就要更新的时间,可以用timeStamp字段来存储,勾选修改就更新为当前时间。sql和代码不用管这个字段。

相关文章

网友评论

      本文标题:java-时间控件一些经验

      本文链接:https://www.haomeiwen.com/subject/vnjgqrtx.html