redisTemplate.expireAt 设置 Date 日期后与实际相差八小时。
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.Date;
// ...
Date originalDate = // 原始日期
ZonedDateTime originalZonedDateTime = originalDate.toInstant().atZone(ZoneId.systemDefault());
ZonedDateTime utcZonedDateTime = originalZonedDateTime.withZoneSameInstant(ZoneId.of("UTC"));
Date utcDate = Date.from(utcZonedDateTime.toInstant());
redisTemplate.expireAt(key, utcDate);
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
行不通,实际没有相差一天。
public void expireAt(String key, Date expire) {
Instant instant = expire.toInstant();
ZonedDateTime utcDateTime = instant.atZone(ZoneId.of("UTC"));
redisTemplate.expireAt(key, new Date(utcDateTime.toInstant().toEpochMilli()));
}
Date now = new Date();
now = DateUtils.addDay(now ,1);
redisTemplate.expireAt("test", now );
再或者 直接 计算一天后的毫秒数, 直接设置过期时间 1000 * 60 *60 *24
指定 ttl 确实可以,不过要是想要正确设置 Date 估计得看系统吧,之前在 window 上可行
redis里面的日期没有设置时区或者是你服务器没有设置时区? 你这个正好差八小时 不就是 北京时间或者上海时间?
看了一下,虚拟机同步了本机时间,导致utc时间有误。取消时间同步就好了。属于错在了意向不到的地方。
之前也以为是时区问题,后面发现redis不论机器时区是啥只看utc。
Sign in to comment