scala持续时间:"此类不是通用的时间表示,它是针对scala.concurrent的需求进行优化的."

Mor*_*mer 9 concurrency time scala duration java-8

我正在为该scala.concurrent.duration.Duration阅读scala文档,我刚刚发现它始于:

这个类并不是时间的通用表示,它是针对scala.concurrent的需求进行优化的.

为什么这个陈述的含义?什么是更好的选择?

soc*_*soc 5

我想我对此负有部分责任。

这里的普遍问题是时间系统很难。真的,真的,真的很难。

致力于标准化期货的Akka开发人员需要一种结构来描述两个“匿名”时间点之间的长度,以实现其功能。Duration旨在解决此特定要求。

我担心的是,人们可能会开始使用这种与时间相关的类来处理某些事情,而该类并非旨在使我们陷入类似于java.util.Date/ java.util.Calendar(并非完全因为其Duration实际用例)的麻烦情况,在这种情况下,很多人会误用它。某种 scala.time从未想过的东西。

这就是为什么它有此注释并被打包到scala.concurrent.duration而不是例如scala.time

我期待java.timeJava 8附带的软件包。将来可能会对此进行标准化,这将稍微提高互操作性,并具有为更广泛的用例设计的额外好处。(不过,Scala使用Java 8作为基准可能要花很长时间……)


Ars*_*lev 3

根据您的需要,时间可以以多种方式表示。我个人用过:

\n\n
    \n
  1. Long\xe2\x80\x94 很多工具直接拿它
  2. \n
  3. 更新java.time.*感谢@Vladimir Matveev

    \n\n

    该包由《Joda Time》的作者(Stephen Colebourne)设计。他说设计得更好。

  4. \n
  5. 乔达时间

  6. \n
  7. java.util.Date

  8. \n
  9. 单独的类层次结构:

    \n\n
    trait Time\ncase class ExactTime(timeMs:Long) extends Time\ncase object Now extends Time\ncase object ASAP extends Time\ncase class RelativeTime(origin:Time, deltaMs:Long) extends Time\n
    Run Code Online (Sandbox Code Playgroud)
  10. \n
  11. 订购时间表示:

    \n\n
    case class History[T](events:List[T])\n
    Run Code Online (Sandbox Code Playgroud)
  12. \n
  13. 模型时间。一旦我有一个全局Timer对象var currentTime:Long

    \n\n
    object Timer {\n  private var currentTimeValue:Long\n  def currentTimeMs = currentTimeValue\n  def currentTimeMs_=(newTime:Long) { ... some checks and notifications}\n  def pseudoRandom:Double = ...\n}\n
    Run Code Online (Sandbox Code Playgroud)\n\n

    在节目中的每一个地方我都打电话Timer.currentTimeMs来争取时间。它允许编写具有受控时间偏移的确定性测试。(小心全局变量!现在我更喜欢使用单独的实例Timer来避免并发问题。)

  14. \n
\n

  • 我将 Joda Time 放在列表中的第一个位置。在 Java 8 中可用的不是“java.util.Date”,而是“java.time.*”包。 (2认同)