The old, much-derided ``++Date++`` and ``++Calendar++`` classes have always been confusing and difficult to use properly, particularly in a multi-threaded context. ``++JodaTime++`` has long been a popular alternative, but now an even better option is built-in. Java 8's JSR 310 implementation offers specific classes for: [frame=all] [cols="^1,^1"] |=== |Class|Use for |LocalDate|a date, without time of day, offset, or zone |LocalTime|the time of day, without date, offset, or zone |LocalDateTime|the date and time, without offset, or zone |OffsetDate|a date with an offset such as +02:00, without time of day, or zone |OffsetTime|the time of day with an offset such as +02:00, without date, or zone |OffsetDateTime|the date and time with an offset such as +02:00, without a zone |ZonedDateTime|the date and time with a time zone and offset |YearMonth|a year and month |MonthDay|month and day |Year/MonthOfDay/DayOfWeek/...|classes for the important fields |DateTimeFields|stores a map of field-value pairs which may be invalid |Calendrical|access to the low-level API |Period|a descriptive amount of time, such as "2 months and 3 days" |=== == Noncompliant Code Example ---- Date now = new Date(); // Noncompliant DateFormat df = new SimpleDateFormat("dd.MM.yyyy"); Calendar christmas = Calendar.getInstance(); // Noncompliant christmas.setTime(df.parse("25.12.2020")); ---- == Compliant Solution ---- LocalDate now = LocalDate.now(); // gets calendar date. no time component LocalTime now2 = LocalTime.now(); // gets current time. no date component LocalDate christmas = LocalDate.of(2020,12,25); ---- ifdef::env-github,rspecator-view[] ''' == Implementation Specification (visible only on this page) include::message.adoc[] ''' == Comments And Links (visible only on this page) include::comments-and-links.adoc[] endif::env-github,rspecator-view[]