-
Notifications
You must be signed in to change notification settings - Fork 2
/
package.scala
57 lines (45 loc) · 2.49 KB
/
package.scala
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package org.gerweck.scala.util
import scala.concurrent.duration._
import org.joda.{ time => jt }
/** Implicit utilities for working with Joda Time.
*
* These have moved out of the `date` package as I now recommend that you
* use the new JSR 310 libraries, either from Java 8 directly or through the
* ThreeTenBP backport project.
*
* @author Sarah Gerweck <sarah.a180@gmail.com>
*/
package object joda {
/* ====================================================================== */
/* Joda-Time enhanced objects */
/* ====================================================================== */
implicit final class RichJodaDateTime(val inner: jt.LocalDateTime) extends AnyVal with UniversalOrdering[jt.LocalDateTime] {
def getQuarter = (inner.getMonthOfYear + 2) / 3
def + (p: jt.ReadablePeriod) = inner plus p
def + (d: jt.ReadableDuration) = inner plus d
def + (d: FiniteDuration) = inner plus jt.Duration.millis(d.toMillis)
def - (p: jt.ReadablePeriod) = inner minus p
def - (d: jt.ReadableDuration) = inner minus d
def - (d: FiniteDuration) = inner minus jt.Duration.millis(d.toMillis)
}
implicit final class RichJodaInstant(val inner: jt.Instant) extends AnyVal with UniversalOrdering[jt.Instant] {
def - (other: jt.Instant): jt.Duration = new jt.Duration(inner.getMillis - other.getMillis)
def - (duration: Long): jt.Instant = inner minus duration
def - (duration: jt.ReadableDuration): jt.Instant = inner minus duration
def - (d: FiniteDuration) = inner minus jt.Duration.millis(d.toMillis)
def + (duration: Long): jt.Instant = inner plus duration
def + (duration: jt.ReadableDuration): jt.Instant = inner plus duration
def + (d: FiniteDuration) = inner plus jt.Duration.millis(d.toMillis)
}
implicit final class RichJodaDuration(val inner: jt.Duration) extends AnyVal with UniversalOrdering[jt.Duration] {
def - (duration: jt.ReadableDuration): jt.Duration = inner minus duration
def - (d: FiniteDuration): jt.Duration = inner minus d.toMillis
def + (duration: jt.ReadableDuration): jt.Duration = inner plus duration
def + (d: FiniteDuration): jt.Duration = inner plus d.toMillis
@inline def + (i: jt.Instant): jt.Instant = i + inner
@inline def + (d: jt.LocalDateTime): jt.LocalDateTime = d + inner
def toDouble: Double = inner.getMillis * 1e-3
def toFloat: Float = inner.getMillis * 1e-3f
def toHuman: String = org.gerweck.scala.util.date.formatDuration(toFloat)
}
}