Есть ли подходящий API для даты и времени для Scala?

Я ищу что-то похожее на JodaTime или JSR 310 для Scala, которое использует приятные Scala функции, такие как перегрузка оператора и не полагается на неявные преобразования (у меня есть иррациональный страх перед неявными преобразованиями).

Я знаю http://github.com/jorgeortiz85/scala-time, но он просто сулит JodaTime с имплицитами.

Ответ 1

Нет ничего плохого в неявных преобразованиях. Даже если библиотека Java не использовалась для базовой логики, любая разумно разработанная чистая библиотека Scala все равно будет использовать implicits, позволяющую писать выражения типа 5.days + 3.minutes.

Не все имплициты создаются равными либо, неявное преобразование в очень специфический тип, которым вы полностью контролируете, почти наверняка безопасно.

Как уже указывали другие, такие преобразования будут оптимизированы в большинстве случаев, особенно при включенном анализе эвакуации, поэтому не позволяйте им беспокоиться о вас!

Пока JSR 310 не будет завершен, joda-time - лучшее, что вы получите.

Помимо необходимости следовать правилам именования Java и отсутствию перегрузки оператора, joda-time уже очень подходит для идиоматических Scala. Дизайн очень функциональный по своей природе, особенно в том смысле, что он охватывает невосприимчивость, поэтому scalaj-время на самом деле является лишь очень тонкой оберткой вокруг библиотеки.

Вы также получаете то преимущество, что время масштабирования можно легко обновить, чтобы использовать JSR 310, когда оно доступно, поэтому будет гораздо менее болезненно переносить ваш код в это время.

Начиная с 2.8, scala -time было переименовано в scalaj-time: http://github.com/scalaj/scalaj-time