从当前时间戳中减去 3 周
Subtract 3 weeks from current timetamp
如何获取当前时间戳 - x 周数 java.sql.Timestamp;
这是我当前的时间戳Timestamp.from(Instant.now(clock));
x- 可以是 0-5 中的任意数字
看到提供的代码,我建议通过 Instant::minus
. Since ChronoUnit.WEEKS
从 Instant
中减去周数 Instant::minus
不支持,我们可以将周数乘以天数与 7.
如果更改 Instant
不是一个选项,我们可以将 Timestamp
转换为 Instant
,减去,然后转换回:
Timestamp.from(timestamp.toInstant().minus(x * 7L, ChronoUnit.DAYS));
或者,如果您是 Optional
的朋友:
Optional.of(timestamp)
.map(Timestamp::toInstant)
.map(t -> t.minus(x * 7L, ChronoUnit.DAYS))
.map(Timestamp::from);
要从日历的当前时间减去 x 周,您还可以尝试:
日历日历=Calendar.getInstance();
calendar.add(Calendar.DAY_OF_MONTH, - (7 * no_of_weeks))
直接使用即时示例,使用本地时间:
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)
似乎 ChronoUnit.WEEKS 不受方法 java.time.Instant.minus 支持,而枚举 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 周数 java.sql.Timestamp;
这是我当前的时间戳Timestamp.from(Instant.now(clock));
x- 可以是 0-5 中的任意数字
看到提供的代码,我建议通过 Instant::minus
. Since ChronoUnit.WEEKS
从 Instant
中减去周数 Instant::minus
不支持,我们可以将周数乘以天数与 7.
如果更改 Instant
不是一个选项,我们可以将 Timestamp
转换为 Instant
,减去,然后转换回:
Timestamp.from(timestamp.toInstant().minus(x * 7L, ChronoUnit.DAYS));
或者,如果您是 Optional
的朋友:
Optional.of(timestamp)
.map(Timestamp::toInstant)
.map(t -> t.minus(x * 7L, ChronoUnit.DAYS))
.map(Timestamp::from);
要从日历的当前时间减去 x 周,您还可以尝试:
日历日历=Calendar.getInstance();
calendar.add(Calendar.DAY_OF_MONTH, - (7 * no_of_weeks))
直接使用即时示例,使用本地时间:
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)
似乎 ChronoUnit.WEEKS 不受方法 java.time.Instant.minus 支持,而枚举 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)