Is it possible to truncate date to Month with Java 8?
This is what java.time.temporal.TemporalAdjusters
are for.
date.with(TemporalAdjusters.firstDayOfMonth()).truncatedTo(ChronoUnit.DAYS);
One way would be to manually set the day to the first of the month:
import static java.time.ZoneOffset.UTC;
import static java.time.temporal.ChronoUnit.DAYS;
ZonedDateTime truncatedToMonth = ZonedDateTime.now(UTC).truncatedTo(DAYS).withDayOfMonth(1);
System.out.println(truncatedToMonth); //prints 2015-06-01T00:00Z
long millis = truncatedToMonth.toInstant().toEpochMilli();
System.out.println(millis); // prints 1433116800000
Or an alternative with a LocalDate
, which is maybe cleaner:
LocalDate firstOfMonth = LocalDate.now(UTC).withDayOfMonth(1);
long millis = firstOfMonth.atStartOfDay(UTC).toEpochSecond() * 1000;
//or
long millis = firstOfMonth.atStartOfDay(UTC).toInstant().toEpochMilli();