Issue
i want to get the 25 hours in miliseconds i.e. 90000000 (25 hours in ms) is there any way i can calculate dynamically using Java 8 Date and Time api ? i am trying like below:
LocalDate.now().minusHours(25).toEpochDay()
The method minusHours(int) is undefined for the type LocalDate
Solution
The following gives you 25 hours converted into milliseconds:
Duration.ofHours(25).toMillis()
If you want an Instant
behind the Unix epoch, you can subtract this duration from Instant.EPOCH
using Instant.EPOCH.minus
.
Demo:
import java.time.Duration;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
public class Solution {
public static void main(String[] args) {
Duration duration = Duration.ofHours(25);
System.out.println(duration.toMillis());
// Instant 25 hours before Unix Epoch
System.out.println(Instant.EPOCH.minus(duration));
// *** Some other useful information ***
// Unix Epoch is zero millisecond. Therefore, any number of millis behind this
// is simply in -ve of this number
System.out.println(Instant.EPOCH.toEpochMilli());
System.out.println(Instant.EPOCH.minus(duration).toEpochMilli());
// Instant and LocalTime in Stockholm 25 hours ago
System.out.println(Instant.now().minus(duration));
System.out.println(Instant.now().minus(duration).toEpochMilli());
System.out.println(LocalDateTime.now(ZoneId.of("Europe/Stockholm")).minus(duration));
}
}
Output at this moment:
90000000
1969-12-30T23:00:00Z
0
-90000000
2022-10-01T15:49:56.515750Z
1664639396515
2022-10-01T17:49:56.541261
Learn more about the the modern date-time API from Trail: Date Time.
Answered By - Arvind Kumar Avinash
Answer Checked By - Pedro (JavaFixing Volunteer)