DateTime.now.hour(0) 如何在 nscala-time 中获取新的 DateTime?

How does DateTime.now.hour(0) get a new DateTime in nscala-time?

我使用来自 https://github.com/nscala-time/nscala-time 的 nsacala-time 包。

import com.github.nscala_time.time.Imports._
DateTime.now.hour(0)
res0: org.joda.time.DateTime = 2015-06-11T22:33:52.266+08:00

将获得一个新的 DateTime 对象。 但是在源代码中,https://github.com/nscala-time/nscala-time/blob/master/src/main/scala/com/github/nscala_time/time/RichDateTime.scala 没有带有签名 (Int) 的小时函数。 似乎 withHour(hour: Int) 完成了确切的工作。

到处都是隐式转换(a.k.a Black Magic,a.k.a 为什么每个人都讨厌 Scala)!!!

  1. hour returns一个org.joda.time.DateTime.Property.

  2. Import._ 导入 RichDateTimeProperty

  3. RichDateTimeProperty 定义了一个 apply 方法,默认情况下在 Scala 中做 something() 如果 something 不是一个方法被翻译成 something.apply(),所以最后通过 2 个隐式转换调用此方法:

    def apply(value: Int): DateTime = underlying.setCopy(value)