Jaki jest standardowy sposób pracy z datami i godzinami w Scali? Czy powinienem używać typów Java, takich jak java.util.Date, czy istnieją natywne alternatywy dla Scala?
Począwszy od Java SE 8, użytkownicy są proszeni o migrację do java.time (JSR-310). Podejmowane są wysiłki w celu stworzenia bibliotek scala, opakowujących java.time dla scali, takich jak scala-time . Jeśli celujesz poniżej SE 8, użyj jednego z poniższych. Zobacz także Dlaczego JSR-310 to nie Joda-Time
Nowe opakowanie Scali dla Joda Time . Ten projekt rozwidlił czas skalowania, ponieważ wydaje się, że czas skalowania nie jest już obsługiwany.
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 to dobra biblioteka Java, dostępna jest biblioteka opakowująca / niejawna konwersja Scala dla Joda Time w czasie scala, stworzona przez Jorge Ortiza . (Zauważ, że implikacje mają wpływ na wydajność, ale to zależy od tego, co zrobisz, jeśli zauważysz. A jeśli napotkasz problem z wydajnością, możesz po prostu powrócić do interfejsu Jody)
Z 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
Imports
iscala.concurrent.duration._
. Zamiast tego użył zwykłego JodaTime i napisał na nim własne rowery.Jeśli używasz Java 8, nie ma już potrzeby korzystania z niej
nscala
. Biblioteka Joda-Time została przeniesiona do Java 8 w ramachjava.time
pakietu (JSR-310). Po prostu zaimportuj ten pakiet do projektu Scala.źródło
Nie ma standardowego sposobu pracy z datami w Scali. Dostępne opcje to:
Unikałbym używania java.util.Date ze względu na dobrze udokumentowane problemy z tym związane.
źródło
MOTYWACJA:
Biblioteki Java Date i Calendar są w dużej mierze niewystarczające. Są zmienne, nie są bezpieczne dla wątków i bardzo niewygodne w użyciu.
Biblioteka Joda Time jest doskonałym zamiennikiem klas daty i kalendarza języka Java. Są one domyślnie niezmienne, mają znacznie bogatszy i ładniejszy interfejs API i w razie potrzeby można je łatwo przekonwertować na klasy Java Date i Calendar.
Ten projekt zapewnia cienką warstwę wygody wokół bibliotek Joda Time, dzięki czemu są one bardziej idiomatyczne w użyciu w Scali.
(skopiowane z https://github.com/jorgeortiz85/scala-time )
źródło
Wszyscy używają JodaTime, te biblioteki pomocnicze / opakowujące Scala mogą wymagać ponownej kompilacji z nowymi wersjami Scali. Jodatime to jedyna biblioteka czasu, która istnieje od dłuższego czasu, jest stabilna i działa niezawodnie z każdą wersją Scali.
źródło