Skip to content

Commit ce0ad30

Browse files
ummelsnicolasstucki
authored andcommitted
Implement date-related java.time classes
Implement `java.time.Period`, `java.time.LocalDate`, `java.time.DayOfWeek` and `java.time.Month` as well as most classes in `java.time.chrono`. Also add more tests for existing `java.time` classes.
1 parent 5e5f390 commit ce0ad30

File tree

11 files changed

+1181
-0
lines changed

11 files changed

+1181
-0
lines changed
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
package java.time
2+
3+
import java.time.temporal._
4+
5+
final class DayOfWeek private (name: String, value: Int)
6+
extends Enum[DayOfWeek](name, value - 1) with TemporalAccessor
7+
with TemporalAdjuster {
8+
9+
def getValue(): Int = value
10+
11+
// Not implemented
12+
// def getDisplayName(style: TextStyle, locale: ju.Locale): String
13+
14+
def isSupported(field: TemporalField): Boolean = field match {
15+
case _: ChronoField => field == ChronoField.DAY_OF_WEEK
16+
case null => false
17+
case _ => field.isSupportedBy(this)
18+
}
19+
20+
// Implemented by TemporalAccessor
21+
// def range(field: TemporalField): ValueRange
22+
23+
// Implemented by TemporalAccessor
24+
// def get(field: TemporalField): Int
25+
26+
def getLong(field: TemporalField): Long = field match {
27+
case ChronoField.DAY_OF_WEEK => ordinal + 1
28+
29+
case _: ChronoField =>
30+
throw new UnsupportedTemporalTypeException(s"Field not supported: $field")
31+
32+
case _ => field.getFrom(this)
33+
}
34+
35+
def plus(days: Long): DayOfWeek = {
36+
val offset = (days % 7 + 7) % 7
37+
DayOfWeek.of((ordinal + offset.toInt) % 7 + 1)
38+
}
39+
40+
def minus(days: Long): DayOfWeek = plus(-(days % 7))
41+
42+
// Not implemented
43+
// def query[R](query: TemporalQuery[R]): R
44+
45+
def adjustInto(temporal: Temporal): Temporal =
46+
temporal.`with`(ChronoField.DAY_OF_WEEK, ordinal + 1)
47+
}
48+
49+
object DayOfWeek {
50+
final val MONDAY = new DayOfWeek("MONDAY", 1)
51+
52+
final val TUESDAY = new DayOfWeek("TUESDAY", 2)
53+
54+
final val WEDNESDAY = new DayOfWeek("WEDNESDAY", 3)
55+
56+
final val THURSDAY = new DayOfWeek("THURSDAY", 4)
57+
58+
final val FRIDAY = new DayOfWeek("FRIDAY", 5)
59+
60+
final val SATURDAY = new DayOfWeek("SATURDAY", 6)
61+
62+
final val SUNDAY = new DayOfWeek("SUNDAY", 7)
63+
64+
private val days =
65+
Seq(MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY)
66+
67+
def values(): Array[DayOfWeek] = days.toArray
68+
69+
def valueOf(name: String): DayOfWeek = days.find(_.name == name).getOrElse {
70+
throw new IllegalArgumentException(s"No such weekday: $name")
71+
}
72+
73+
def of(dayOfWeek: Int): DayOfWeek = days.lift(dayOfWeek - 1).getOrElse {
74+
throw new DateTimeException(s"Invalid value for weekday: $dayOfWeek")
75+
}
76+
77+
def from(temporal: TemporalAccessor): DayOfWeek =
78+
DayOfWeek.of(temporal.get(ChronoField.DAY_OF_WEEK))
79+
}

0 commit comments

Comments
 (0)