What's the standard way to work with dates and times in Scala? Should I use Java types or there are native Scala alternatives?

DatetimeScalaJodatime

Datetime Problem Overview


What's the standard way to work with dates and times in Scala? Should I use Java types such as java.util.Date or there are native Scala alternatives?

Datetime Solutions


Solution 1 - Datetime

From Java SE 8 onwards, users are asked to migrate to java.time (JSR-310). There are efforts on creating scala libraries wrapping java.time for scala such as scala-time. If targeting lower than SE 8 use one of the below. Also see Why JSR-310 isn't Joda-Time

Awesome scala lists many of the popular Scala DateTime apis


A new Scala wrapper for Joda Time. This project forked from scala-time since it seems that scala-time is no longer maintained.

import com.github.nscala_time.time.Imports._

DateTime.now // returns org.joda.time.DateTime = 2009-04-27T13:25:42.659-07:00

DateTime.now.hour(2).minute(45).second(10) // returns org.joda.time.DateTime = 2009-04-27T02:45:10.313-07:00

DateTime.now + 2.months // returns org.joda.time.DateTime = 2009-06-27T13:25:59.195-07:00

DateTime.nextMonth < DateTime.now + 2.months // returns Boolean = true

DateTime.now to DateTime.tomorrow  // return org.joda.time.Interval = > 2009-04-27T13:47:14.840/2009-04-28T13:47:14.840

(DateTime.now to DateTime.nextSecond).millis // returns Long = 1000

2.hours + 45.minutes + 10.seconds
// returns com.github.nscala_time.time.DurationBuilder
// (can be used as a Duration or as a Period)

(2.hours + 45.minutes + 10.seconds).millis
// returns Long = 9910000

2.months + 3.days
// returns Period

Joda Time is a good Java library, there is a Scala wrapper / implicit conversion library avaliable for Joda Time at scala-time created by Jorge Ortiz. (Note implicits have a performance hit, but it depends on what you do if you will notice. And if you run into a performance problem you can just revert to the Joda interface)

From the README:

USAGE:
  import org.scala_tools.time.Imports._

  DateTime.now
  // returns org.joda.time.DateTime = 2009-04-27T13:25:42.659-07:00

  DateTime.now.hour(2).minute(45).second(10)
  // returns org.joda.time.DateTime = 2009-04-27T02:45:10.313-07:00

  DateTime.now + 2.months
  // returns org.joda.time.DateTime = 2009-06-27T13:25:59.195-07:00

  DateTime.nextMonth < DateTime.now + 2.months
  // returns Boolean = true
  DateTime.now to DateTime.tomorrow
  // return org.joda.time.Interval =
  //   2009-04-27T13:47:14.840/2009-04-28T13:47:14.840

  (DateTime.now to DateTime.nextSecond).millis
  // returns Long = 1000
	
  2.hours + 45.minutes + 10.seconds
  // returns org.scala_tools.time.DurationBuilder
  // (can be used as a Duration or as a Period)
	
  (2.hours + 45.minutes + 10.seconds).millis
  // returns Long = 9910000	
	
  2.months + 3.days
  // returns Period

Solution 2 - Datetime

If you are using Java 8, then there is no need to use nscala anymore. The Joda-Time library has been moved into Java 8 under the java.time package (JSR-310). Just import that package into your Scala project.

Solution 3 - Datetime

There is no standard way to work with dates in Scala. The options available are:

  1. Use java.time (if you are using Java 8) since it has the best of JODA time built into it. No implicits.
  2. Use nscala-time.
  3. Lamma date library (relatively new library on the scene)

I would avoid using java.util.Date due to the well-documented issues surrounding it.

Solution 4 - Datetime

MOTIVATION:

The Java Date and Calendar libraries are largely inadequate. They are mutable, not thread-safe, and very inconvenient to use.

The Joda Time library is a great replacement for Java's Date and Calendar classes. They're immutable by default, have a much richer and nicer API, and can easily be converted to Java's Date and Calendar classes when necessary.

This project provides a thin layer of convenience around the Joda Time libraries, making them more idiomatic to use within Scala.

(copied from https://github.com/jorgeortiz85/scala-time)

Solution 5 - Datetime

Everyone uses JodaTime, these Scala helper/wrapper libraries may need re-compilation with new versions of Scala. Jodatime is the only time library that's been around for a long time, and is stable and works reliably with every version of Scala.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionIvanView Question on Stackoverflow
Solution 1 - DatetimeoluiesView Answer on Stackoverflow
Solution 2 - Datetimeuser4380869View Answer on Stackoverflow
Solution 3 - DatetimeM.K.View Answer on Stackoverflow
Solution 4 - DatetimePavel SklenakView Answer on Stackoverflow
Solution 5 - DatetimeirishjavaView Answer on Stackoverflow