Recipe Name:
Convert LocalDate getTime to java.time Equivalent
Description:
Convert LocalDate getTime to java.time Equivalent
Level:
warning
Language:
  • java
Tags:
  • java.time
  • java.util.Calendar
  • quality
Documentation

Migrate from java.util.Date and java.util.Calendar to Java Time

Prior to the Java SE 8 release, the Java date and time mechanism was provided by the java.util.Date, java.util.Calendar, and java.util.TimeZone classes, as well as their subclasses, such as java.util.GregorianCalendar.

These classes had several drawbacks, including:

  • The Calendar class was not type safe.
  • Because the classes were mutable, they could not be used in multithreaded applications.
  • Bugs in application code were common due to the unusual numbering of months and the lack of type safety.

Perhaps you have legacy code that uses the java.util date and time classes and you would like to take advantage of the java.time functionality with minimal changes to your code.

Examples

Before
    Calendar calendar = new GregorianCalendar(2020, 05, 10, 10, 30);
    calendar.add(Calendar.YEAR, 1);
After
    LocalDateTime calendar = LocalDateTime.of(2020, 05, 10, 10, 30);
    calendar.plusYears(1);
References
Recipe
id: scw:calendar:get-time-localdate
version: 10
metadata:
  name: Convert LocalDate getTime to java.time Equivalent
  shortDescription: Convert LocalDate getTime to java.time Equivalent
  level: warning
  language: java
  enabled: true
  comment: "This recipe is designed to match on broken code during a migration from java.util.Date or java.util.Calendar to java.time.\n\nThis recipe provides 2 fixes, one is designed to return a java.util.Date, and the other to return a long. \nThis is because depending on whether this object was migrated from Calendar or Date, it would have previously returned different types.\n\nBe aware this recipe uses a system default timezone (ZoneId.systemDefault()). "
  descriptionFile: Java/Date-Calendar/descriptions/date-calendar.html
  tags: java.time;java.util.Calendar;quality
search:
  methodcall:
    argCount: 0
    name: getTime
    type: java.time.LocalDate
availableFixes:
- name: Rewrite to Date.from(instant)
  actions:
  - rewrite:
      to: java.util.Date.from({{{ qualifier }}}.atStartOfDay(java.time.ZoneId.systemDefault()).toInstant())
- name: Rewrite to toInstant().toEpochMilli()
  actions:
  - rewrite:
      to: '{{{ qualifier }}}.atStartOfDay(java.time.ZoneId.systemDefault()).toInstant().toEpochMilli()'