Differences between Java 8 Date Time API (java.time) and Joda-Time

Common features a) Both libraries use immutable types. Joda-Time also offers additional mutable types like MutableDateTime. b) Furthermore: Both libraries are inspired by the design study “TimeAndMoney” from Eric Evans or ideas from Martin Fowler about domain driven style so they strive more or less for a fluent programming style (although not always perfect ;-)). … Read more

How can I create a Java 8 LocalDate from a long Epoch time in Milliseconds?

If you have the milliseconds since the Epoch and want to convert them to a local date using the current local timezone, you can use Instant.ofEpochMilli(long epochMilli) LocalDate date = Instant.ofEpochMilli(longValue).atZone(ZoneId.systemDefault()).toLocalDate(); but keep in mind that even the system’s default time zone may change, thus the same long value may produce different result in subsequent … Read more

serialize/deserialize java 8 java.time with Jackson JSON mapper

There’s no need to use custom serializers/deserializers here. Use jackson-modules-java8’s datetime module: Datatype module to make Jackson recognize Java 8 Date & Time API data types (JSR-310). This module adds support for quite a few classes: Duration Instant LocalDateTime LocalDate LocalTime MonthDay OffsetDateTime OffsetTime Period Year YearMonth ZonedDateTime ZoneId ZoneOffset

UnsupportedTemporalTypeException when formatting Instant to String

Time Zone To format an Instant a time-zone is required. Without a time-zone, the formatter does not know how to convert the instant to human date-time fields, and therefore throws an exception. The time-zone can be added directly to the formatter using withZone(). DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime( FormatStyle.SHORT ) .withLocale( Locale.UK ) .withZone( ZoneId.systemDefault() ); … Read more

Calculate days between two Dates in Java 8

If you want logical calendar days, use DAYS.between() method from java.time.temporal.ChronoUnit: LocalDate dateBefore; LocalDate dateAfter; long daysBetween = DAYS.between(dateBefore, dateAfter); If you want literal 24 hour days, (a duration), you can use the Duration class instead: LocalDate today = LocalDate.now() LocalDate yesterday = today.minusDays(1); // Duration oneDay = Duration.between(today, yesterday); // throws an exception Duration.between(today.atStartOfDay(), … Read more

How to get milliseconds from LocalDateTime in Java 8

I’m not entirely sure what you mean by “current milliseconds” but I’ll assume it’s the number of milliseconds since the “epoch,” namely midnight, January 1, 1970 UTC. If you want to find the number of milliseconds since the epoch right now, then use System.currentTimeMillis() as Anubian Noob has pointed out. If so, there’s no reason … Read more

How to parse/format dates with LocalDateTime? (Java 8)

Parsing date and time To create a LocalDateTime object from a string you can use the static LocalDateTime.parse() method. It takes a string and a DateTimeFormatter as parameter. The DateTimeFormatter is used to specify the date/time pattern. String str = “1986-04-08 12:30”; DateTimeFormatter formatter = DateTimeFormatter.ofPattern(“yyyy-MM-dd HH:mm”); LocalDateTime dateTime = LocalDateTime.parse(str, formatter); Formatting date and … Read more

Convert java.util.Date to java.time.LocalDate

Short answer Date input = new Date(); LocalDate date = input.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); Explanation Despite its name, java.util.Date represents an instant on the time-line, not a “date”. The actual data stored within the object is a long count of milliseconds since 1970-01-01T00:00Z (midnight at the start of 1970 GMT/UTC). The equivalent class to java.util.Date in JSR-310 is … Read more

Converting between java.time.LocalDateTime and java.util.Date

Short answer: Date in = new Date(); LocalDateTime ldt = LocalDateTime.ofInstant(in.toInstant(), ZoneId.systemDefault()); Date out = Date.from(ldt.atZone(ZoneId.systemDefault()).toInstant()); Explanation: (based on this question about LocalDate) Despite its name, java.util.Date represents an instant on the time-line, not a “date”. The actual data stored within the object is a long count of milliseconds since 1970-01-01T00:00Z (midnight at the start … Read more