微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从当前时间戳记减去3周

如何解决从当前时间戳记减去3周

如何获取当前时间戳-使用java.sql.Timestamp; x的周数;

这是我当前的时间戳Timestamp.from(Instant.Now(clock));

x-可以是0-5之间的任何数字

解决方法

看到提供的代码,我建议通过Instant::minusInstant中减去几周。由于Instant::minus不支持ChronoUnit.WEEKS,因此我们可以通过将它们乘以7来转换星期数。

如果不选择更改Instant,我们可以将Timestamp转换为Instant,减去后再转换回去:

Timestamp.from(timestamp.toInstant().minus(x * 7L,ChronoUnit.DAYS));

Ideone demo

或者,如果您是Optional s的朋友:

Optional.of(timestamp)
    .map(Timestamp::toInstant)
    .map(t -> t.minus(x * 7L,ChronoUnit.DAYS))
    .map(Timestamp::from);

Ideone demo

,

使用本地时间的“直接使用即时”示例:

Instant.now(Clock.systemDefaultZone()).minus(numberOfWeeks * 7L,ChronoUnit.DAYS);

在上下文中使用:

public static void main(String[] args) {
    Instant now = Instant.now(Clock.systemDefaultZone());
    System.out.println("The time right now (local time): " + Timestamp.from(now));

    long numberOfWeeks = 3L;
    Instant minusXweeks = now.minus(numberOfWeeks * 7L,ChronoUnit.DAYS);
    System.out.println("The time 3 weeks before now (local time): " + Timestamp.from(minusXweeks));
}

输出:

The time right now (local time): 2020-08-20 23:24:58.077223
The time 3 weeks before now (local time): 2020-07-30 23:24:58.077223

注意:

为什么不直接使用ChronoUnit.WEEKS?见下文:

Instant.now(Clock.systemDefaultZone()).minus(numberOfWeeks,ChronoUnit.WEEKS)

方法java.time.Instant.minus不支持ChronoUnit.WEEKS之类的东西,而枚举ChronoUnit.DAYS受支持。在方法java.time.Instant.minus中使用ChronoUnit.WEEKS时,将引发以下异常:

Exception in thread "main" java.time.temporal.UnsupportedTemporalTypeException: Unsupported unit: Weeks
at java.base/java.time.Instant.plus(Instant.java:861)
at java.base/java.time.Instant.minus(Instant.java:978)
at TestClass.main(TestClass.java:18)
,

要从日历的当前时间中减去x周,您还可以尝试:

日历日历= Calendar.getInstance();

calendar.add(日历.DAY_OF_MONTH,-(7 *无周数))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。