Some important things that we have to know about the java.time API
is the following:
- Is an evolution from the previous
java.util.Date (Calendar, TimeZone & DateFormat)
- Instances of time/date now are immutable. (This is importat for lambda expressions)
- Time and Date operations now are thread safe.
- The API support strong typing, which enables you to write better code.
A quick glance to the Date methods
import java.time.*;
public class DateOperations {
private void operations() throws Exception {
LocalDate localDate = LocalDate.now();
System.out.println("LocalDate in YYYY-MM-DD format: " + localDate);
System.out.println("Day of the week: " + localDate.getDayOfWeek());
System.out.println("Next week: " + localDate.plusDays(7));
System.out.println("Is a Leap Year?: " + localDate.isLeapYear());
LocalDate christmas = LocalDate.of(2021, Month.DECEMBER, 25);
System.out.println("Today is before Christmas?: " + localDate.isBefore(christmas));
LocalDate christmasParsed = LocalDate.parse("2021-12-25");
System.out.println("Christmas Parsed: " + christmasParsed);
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println("Local Date Time: " + localDateTime);
ZonedDateTime zonedDateTime = ZonedDateTime.now();
System.out.println("Zoned Date Time: " + zonedDateTime);
Instant instant = Instant.now();
System.out.println("Instant: " + instant);
Instant start = Instant.now();
Thread.sleep(1000);
Instant end = Instant.now();
System.out.println("Duration in seconds: " + Duration.between(start, end).getSeconds());
}
public static void main(String[] args) throws Exception {
new DateOperations().operations();
}
}
output
LocalDate in YYYY-MM-DD format: 2020-07-10
Day of the week: FRIDAY
Next week: 2020-07-17
Is a Leap Year?: true
Today is before Christmas?: false
Christmas Parsed: 2020-12-25
Local Date Time: 2020-07-10T13:25:42.392957
Zoned Date Time: 2020-07-10T13:25:42.393143-04:00[America/Detroit]
Instant: 2020-07-10T17:25:42.393278Z
Duration in seconds: 1
Calculating Between Days
When you want to perform calculations between days, temporal unit interface unit can be used, since represents a unit of time. Enumeration ChronoUnit actually implements our temporal unit interface. By importing java.time.temporal,ChronoUnit.*
you can use enumerations such as DAYS, WEEKS, MONTHS, YEARS and you can use methods as between.
example
import java.time.LocalDate;
import java.time.Month;
import java.time.Period;
import static java.time.temporal.ChronoUnit.DAYS;
public class BetweenDays {
private void compute() {
LocalDate christmas = LocalDate.of(2021, Month.DECEMBER, 25);
LocalDate today = LocalDate.now();
long days = DAYS.between(today, christmas);
System.out.println("There are " + days + " shopping days until Christmas");
Period untilChristmas = Period.between(today, christmas);
System.out.println(
"There are "
+ untilChristmas.getMonths()
+ " months and "
+ untilChristmas.getDays()
+ " days until Christmas");
}
public static void main(String[] args) {
new BetweenDays().compute();
}
output
There are 168 shopping days until Christmas
A period class also have a between method and you can use it to figure out how many days or months are between dates.
example
import java.time.LocalDate;
import java.time.Month;
import java.time.Period;
import static java.time.temporal.ChronoUnit.DAYS;
public class BetweenDays {
private void compute() {
LocalDate christmas = LocalDate.of(2020, Month.DECEMBER, 25);
LocalDate today = LocalDate.now();
long days = DAYS.between(today, christmas);
System.out.println("There are " + days + " shopping days until Christmas");
Period untilChristmas = Period.between(today, christmas);
System.out.println(
"There are "
+ untilChristmas.getMonths()
+ " months and "
+ untilChristmas.getDays()
+ " days until Christmas");
}
public static void main(String[] args) {
new BetweenDays().compute();
}
}
output
There are 168 shopping days until Christmas
There are 5 months and 15 days until Christmas
How to format LocalDate
To format a LocalDate object, uses DateTimeFormatter
example
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class DateFormatter {
private void format(){
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MMM");
LocalDate today = LocalDate.now();
System.out.println("YYYY-MMM format from now is: " + today.format(formatter));
}
public static void main(String[] args){
new DateFormatter().format();
}
}
output
YYYY-MMM format from now is: 2020-Jul
To browse the code go here, to download the code:
git clone git@github.com:josdem/java-workshop.git
cd date-and-time