Datetime Scala是否有一个好的日期/时间API?

Datetime Scala是否有一个好的日期/时间API?,datetime,scala,scala-2.8,Datetime,Scala,Scala 2.8,我正在寻找类似于JodaTime或JSR 310 for Scala的东西,它利用了Scala的良好特性,例如操作符重载,并且不依赖隐式转换(我对隐式转换有一种不合理的恐惧) 我知道,但它只是用隐式转换来拉JodaTime。隐式转换没有错。即使Java库没有用于底层逻辑,任何合理设计的纯Scala库仍然会隐式使用,允许您编写表达式,如5.days+3.minutes 也不是所有隐式都是平等创建的,隐式转换为您完全控制的非常特定的类型几乎肯定是安全的 正如其他人已经说过的,在大多数情况下,这种转换

我正在寻找类似于JodaTime或JSR 310 for Scala的东西,它利用了Scala的良好特性,例如操作符重载,并且不依赖隐式转换(我对隐式转换有一种不合理的恐惧)


我知道,但它只是用隐式转换来拉JodaTime。

隐式转换没有错。即使Java库没有用于底层逻辑,任何合理设计的纯Scala库仍然会隐式使用,允许您编写表达式,如
5.days+3.minutes

也不是所有隐式都是平等创建的,隐式转换为您完全控制的非常特定的类型几乎肯定是安全的

正如其他人已经说过的,在大多数情况下,这种转换都会被优化掉,特别是在启用了escape analysis的情况下,所以不要让它们让你担心

在JSR 310最终确定之前,joda time是您将获得的最佳时间

除了需要遵循Java命名约定和缺少运算符重载之外,joda time已经非常适合惯用Scala。这个设计在本质上是非常实用的,特别是它包含不可变性的方式,因此scalaj time实际上只是库的一个非常薄的包装

您还可以获得这样的好处:scalaj time可以在可用时轻松升级到使用JSR 310,因此在那时迁移代码的痛苦会小得多


自2.8版以来,scala time已更名为scalaj time:

您是否正在寻找提供运算符的东西?我建议您摆脱对隐式转换的非理性恐惧。;-)@Timo-我想要比较运算,以及像+和负这样的东西@杰斯珀——这种恐惧并不完全是非理性的。它的性能很受欢迎。它们可以引起与平等等事物的奇怪互动。他们依赖于类型推断,我发现混合使用许多依赖于类型推断的东西是造成绝对混乱的好方法。如果你想使用JodaTime和Scala,使用操作符重载进行比较等,你可以使用JodaTime的另一种构建方式,例如,将有序特征方法添加到AbstractPartial和AbstractInstant。我知道这是有风险的,但我也不喜欢隐式转换拉皮条我的库使用。性能:热点中的转义分析可以消除一些开销。但我还没有确切的数字。相等:如果在A上定义一个“新方法”,并将其转换为B,那么只有在新方法中返回类型为B的内容(不再是A)时,才会混淆相等。我认为,这就是RichString不对称的问题。我可以想象,从Scala的JodaTime包装器到Scala的JSR310包装器的迁移将比直接(或在Java中)使用这些东西要轻松得多。如果更改导出和修复某些类名就足够了,那将很有趣:-)隐式转换在包装的作用之上添加了一个半隐藏的间接层。这增加了复杂性和运行时开销。它们作为一个特性并没有什么错,但有时它们会被免费使用。将一个裸整数转换为分钟数是否免费?