2010-05-18 3 views
11

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

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

+0

Вы ищете что-то, который обеспечивает <, > операторов? –

+4

Я предлагаю вам избавиться от вашего иррационального страха неявных преобразований. ;-) – Jesper

+0

@Timo - Мне бы хотелось, чтобы операции сравнения вместе с вещами вроде + и минус. @Jesper - Страх не совсем иррациональен. У Implicits есть удар производительности. Они могут вызывать странные взаимодействия с такими вещами, как равенство. Они полагаются на вывод типа, и я обнаружил, что смешивать множество вещей, которые полагаются на вывод типа, является хорошим рецептом абсолютной путаницы. –

ответ

3

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

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

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

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

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

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

С 2.8, Скалой времени было переименовано scalaj время: http://github.com/scalaj/scalaj-time

+1

Я могу себе представить, что переход от обложек JodaTime от Scala к обертке JSR310 от Scala будет намного меньше, чем использование этих вещей напрямую (или в Java). Было бы здорово, если бы изменение экспорта и исправление некоторых имен классов было бы достаточно :-) – soc

+0

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

+0

Можно ли конвертировать голое целое число в несколько минут? –