ลบ 3 สัปดาห์จากตารางเวลาปัจจุบัน
ฉันจะรับเวลาประทับปัจจุบันได้อย่างไร - x จำนวนสัปดาห์โดยใช้ java.sql.Timestamp;
นี่คือการประทับเวลาปัจจุบันของฉัน Timestamp.from(Instant.now(clock));
x- อาจเป็นตัวเลขใดก็ได้ตั้งแต่ 0-5
คำตอบ
เมื่อเห็นรหัสที่ให้มาฉันขอแนะนำให้ลบสัปดาห์ที่Instant
ผ่านInstant::minusมา เนื่องจากChronoUnit.WEEKSไม่ได้รับการสนับสนุนInstant::minus
เราจึงสามารถแปลงสัปดาห์เป็นวันได้โดยการคูณด้วย 7
หากการเปลี่ยนInstant
ไม่ใช่ตัวเลือกเราสามารถแปลงTimestamp
เป็นInstant
ลบและแปลงกลับได้:
Timestamp.from(timestamp.toInstant().minus(x * 7L, ChronoUnit.DAYS));
Ideone demo
หรือถ้าคุณเป็นเพื่อนของOptional:
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)
ดูเหมือนว่า ChronoUnit.WEEKS ไม่รองรับเมธอด java.time.instant.minus ในขณะที่ enum ChronoUnit.DAYS คือ เมื่อใช้ ChronoUnit.WEEKS ในวิธี java.time.instant.minus ข้อยกเว้นต่อไปนี้จะถูกโยน:
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 (Calendar.DAY_OF_MONTH, - (7 * no_of_weeks))