Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >实现redis缓存次日凌晨失效

实现redis缓存次日凌晨失效

作者头像
adu
发布于 2022-10-30 07:00:10
发布于 2022-10-30 07:00:10
1K00
代码可运行
举报
文章被收录于专栏:adu_blogadu_blog
运行总次数:0
代码可运行

思路

实际项目开发过程中我们需要设置某个redis的key只保留一天,如刷新时间日期的key,所以我们在设置的key的时候就需要计算当前时间离凌晨的秒数

方案一:使用Calendar(Java 8之前)

getInstance()是Calendar提供的一个类方法,它的作用是获得一个Calendar类型的通用对象,getInstance()将返回一个Calendar的对象。使用Calendar.getInstance()不仅能获取当前的时间,还能指定需要获取的时间点。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public static Integer getRemainSecondsOneDay(Date currentDate) {
        Calendar midnight=Calendar.getInstance();
        midnight.setTime(currentDate);
        midnight.add(midnight.DAY_OF_MONTH,1);//将日加1
        midnight.set(midnight.HOUR_OF_DAY,0);//控制时
        midnight.set(midnight.MINUTE,0);//控制分
        midnight.set(midnight.SECOND,0);//控制秒
        midnight.set(midnight.MILLISECOND,0);//毫秒
        //通过以上操作就得到了一个currentDate明天的0时0分0秒的Calendar对象,然后相减即可得到到明天0时0点0分0秒的时间差
        Integer seconds=(int)((midnight.getTime().getTime()-currentDate.getTime())/1000);
        return seconds;
    }

方案二:java8之后,我们可以使用LocalDateTime

Java8推出了线程安全、简易、高可靠的时间包,LocalDateTime其中之一

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public static Integer getRemainSecondsOneDays(Date currentDate) {
        //使用plusDays加传入的时间加1天,将时分秒设置成0
        LocalDateTime midnight = LocalDateTime.ofInstant(currentDate.toInstant(),
                ZoneId.systemDefault()).plusDays(1).withHour(0).withMinute(0)
                .withSecond(0).withNano(0);
        LocalDateTime currentDateTime = LocalDateTime.ofInstant(currentDate.toInstant(),
                ZoneId.systemDefault());
        //使用ChronoUnit.SECONDS.between方法,传入两个LocalDateTime对象即可得到相差的秒数
        long seconds = ChronoUnit.SECONDS.between(currentDateTime, midnight);
        return (int) seconds;
    }

测试

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    public static void main(String[] args) {
//        int time = ComputationTimeUtils.getRemainSecondsOneDay(new Date());
        int time = ComputationTimeUtils.getRemainSecondsOneDays(new Date());
        System.err.println(time);
    }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022/08/10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
日期时间之争:Date与LocalDateTime的决胜局
时间是计算机科学和应用开发中的一个关键概念,正确处理日期和时间对于应用程序的功能和准确性至关重要。Java中有多种日期时间类可供选择,其中包括传统的Date类和较新的LocalDateTime类。本文将带您进入这两个类的世界,解释它们的不同之处,以及如何在Java中使用它们。无论您是Java新手还是有经验的开发人员,都会在这篇博客中找到有关处理日期和时间的宝贵知识。
一只牛博
2025/05/31
920
一文带你入坑JDK8的新日期时间类 LocalDate、LocalTime、LocalDateTime
参考 https://blog.csdn.net/duan196_118/article/details/111597682 https://blog.csdn.net/qq_24754061/article/details/95500209 https://xijia.blog.csdn.net/article/details/106007147
时间静止不是简史
2023/02/23
5K0
一文带你入坑JDK8的新日期时间类 LocalDate、LocalTime、LocalDateTime
Java中各种时间类型相互转换
Java中各种时间类型相互转换 参数声明: final Date date = new Date(); final Timestamp timestamp = new Timestamp(date.getTime()); final Calendar calendar = Calendar.getInstance(); final Instant instant = Instant.now(); final LocalDateTime localDateTime = LocalDa
Java那些事儿
2020/07/21
6.2K0
SpringBoot系列之使用Redis ZSet实现排序分页
相对于set来说,sorted set是一种有序的set,排序是根据每个元素的score排序的,score相同时根据key的ASCII码排序
SmileNicky
2023/12/05
1.1K0
SpringBoot系列之使用Redis ZSet实现排序分页
Java8日期类的一个具体应用案例
最近拜读了一篇不错的文章原文:http://lrwinx.github.io/2017/03/04/%E7%BB%86%E6%80%9D%E6%9E%81%E6%81%90-%E4%BD%A0%E7%9C%9F%E7%9A%84%E4%BC%9A%E5%86%99java%E5%90%97/
明明如月学长
2021/08/27
4190
java.util.Date 与 java.time.LocalDateTime互转及大小比较
六月的雨在Tencent
2024/03/28
1500
java最全最常用的日期工具类(随时补充)
@Slf4j public final class DateUtils { private DateUtils() { } private static final String FORMAT_YYYYMMDDHHMMSS = "yyyy-MM-dd HH:mm:ss"; public static final String FORMAT_YYYY_MM_DD = "yyyy-MM-dd"; public static final String FORMAT_
疯狂的KK
2023/04/10
1.3K0
Java8:LocalDate LocalDateTime Date相互转化
时间日期处理是平时工作中使用非常频繁的逻辑,Java8中提供的新的时间类LocalDateTime和LocalDate,使日期处理可以更简单。 友情提醒下,业务开发中最好默认使用LocalDateTime,因为LocalDateTime可以很方便的转换为LocalDate,但是LocalDate是不可以转为LocalDateTime的,会没有时分秒的数据!!!
全栈程序员站长
2022/11/10
1.1K0
再见!SimpleDateFormat
SimpleDateFormat is a concrete class for formatting and parsing dates in a locale-sensitive manner. It allows for formatting (date → text), parsing (text → date), and normalization.
用户5397975
2019/10/14
1K0
再见!SimpleDateFormat
java8的日期API总结(JSR310)
有了 java.util.Date 又搞出个java.sql.Date,改个名字不行?
pollyduan
2019/11/04
1.1K0
java8 时间类
https://www.yiibai.com/javatime/javatime_localdate.html
用户10325771
2023/03/01
4460
Java1.8新时间api - LocalDateTime
新时间对象: 1.LocalDate表示年月日 2.LocalTime表示时分秒 3.LocalDateTime表示年月日时分秒 4.Instant:表示时刻,不直接对应年月日信息,需要通过时区转换 5.ZonedDateTime: 表示特定时区的日期和时间 6.ZoneId/ZoneOffset:表示时区 1、获取对象的方法 //通过静态方法now()获取当前时间 LocalDate now1 = LocalDate.now(); LocalTime now2 = LocalTim
Java深度编程
2020/12/22
3.3K0
Jdk14 都要出了,Jdk8 的时间处理姿势还不了解一下?
当前时间:2019年10月24日。距离 JDK 14 发布时间(2020年3月17日)还有多少天?
未读代码
2019/11/04
7720
LocalDateTime、Date时间工具类
参考:Date、LocalTime、LocalDate、LocalDate-时间操作工具类_Hatsune_Miku_的博客-CSDN博客
CBeann
2023/12/25
3260
Java8中LocalDateTime与时间戳timestamp的互相转换及ChronoUnit工具类
Java8中LocalDateTime与时间戳timestamp的互相转换及ChronoUnit工具类import java.time.*;import java.time.format.DateTimeFormatter;
oktokeep
2024/10/09
4580
JDK8的日期时间操作
查询当前日期(年月日)LocalDate localDate = LocalDate.now();System.out.println(localDate);//2021-11-18查询当前时间(时分秒)LocalTime localTime = LocalTime.now();String format = localTime.format(DateTimeFormatter.ofPattern("HH🇲🇲ss"));System.out.println(localTime.getHour()+":"+l
在下是首席架构师
2022/08/18
9700
Java 8: LocalDate、LocalTime 、LocalDateTime 处理日期时间
原文链接:https://blog.csdn.net/weixin_39800144/article/details/78460643、https://blog.csdn.net/ty0903csdn/article/details/84927507
微风-- 轻许--
2019/09/18
3.6K0
大厂都是怎么用Java8代替SimpleDateFormat?
从getFirstDayOfWeek()开始,完整的7天,并且包含那一年至少getMinimalDaysInFirstWeek()天。 该计算方式和区域相关,对zh_CN区域,2020年第一周条件:从周日开始的完整7天,2020年包含1天即 可。显然,2019年12月27日周日到2020年1月2日周六是2020年第一周,得出的week year就是2021年。
JavaEdge
2021/02/23
1.8K0
大厂都是怎么用Java8代替SimpleDateFormat?
JDK8这样处理日期,效率绝对提升,逼格必然翻倍!
开发过程中,经常需要为过生日的用户送上一些祝福,例如,用户的生日为1990-10-12,如果今天是2016-10-12,那么今天就是用户的生日(按公历/身份证日期来算),那么通过java8新的日期库,我们该如何来进行判断?
程序员小明
2019/06/03
3.2K0
java 8:只取年月日的java.util.Date(时分秒清零)对象
该文介绍了如何将java.util.Date对象转换为只包含年月日信息的java.time.LocalDate对象,并给出了具体的示例代码。同时还介绍了如何将LocalDate对象转换为java.sql.Date对象,以便将其用于SQL DATE类型。
10km
2018/01/03
8.1K0
推荐阅读
相关推荐
日期时间之争:Date与LocalDateTime的决胜局
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验