Kurangi 3 minggu dari jadwal saat ini
Bagaimana saya bisa mendapatkan cap waktu saat ini - x jumlah minggu menggunakan java.sql.Timestamp;
Ini cap waktu saya saat ini Timestamp.from(Instant.now(clock));
x- bisa berupa angka dari 0-5
Jawaban
Melihat kode yang diberikan, saya sarankan untuk mengurangi minggu dari Instant
via Instant::minus. Karena ChronoUnit.WEEKStidak didukung oleh Instant::minus
, kita dapat mengonversi minggu dalam hari dengan mengalikannya dengan 7.
Jika mengubah Instant
is bukan pilihan, kita bisa mengonversinya Timestamp
menjadi Instant
, kurangi, dan ubah kembali:
Timestamp.from(timestamp.toInstant().minus(x * 7L, ChronoUnit.DAYS));
Ideone demo
Atau, jika Anda adalah teman Optionals:
Optional.of(timestamp)
.map(Timestamp::toInstant)
.map(t -> t.minus(x * 7L, ChronoUnit.DAYS))
.map(Timestamp::from);
Ideone demo
Contoh Menggunakan Langsung Langsung, menggunakan waktu setempat:
Instant.now(Clock.systemDefaultZone()).minus(numberOfWeeks * 7L, ChronoUnit.DAYS);
Digunakan dalam konteks:
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));
}
Keluaran:
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
CATATAN:
Mengapa tidak menggunakan ChronoUnit.WEEKS secara langsung? Lihat di bawah:
Instant.now(Clock.systemDefaultZone()).minus(numberOfWeeks, ChronoUnit.WEEKS)
Sepertinya ChronoUnit.WEEKS tidak didukung oleh metode java.time.Instant.minus sedangkan enum ChronoUnit.DAYS adalah. Saat menggunakan ChronoUnit.WEEKS dalam metode java.time.Instant.minus, maka pengecualian berikut dilemparkan:
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)
Untuk mengurangi x minggu dari waktu saat ini di kalender, Anda juga dapat mencoba:
Kalender kalender = Calendar.getInstance ();
calendar.add (Calendar.DAY_OF_MONTH, - (7 * no_of_weeks))