tracks/scala/exercises/meetup/example.scala in trackler-2.0.6.17 vs tracks/scala/exercises/meetup/example.scala in trackler-2.0.6.18
- old
+ new
@@ -1,44 +1,33 @@
-import java.util.{Calendar, GregorianCalendar}
+import java.time.DayOfWeek
+import java.time.LocalDate
case class Meetup(month: Int, year: Int) {
- private val thirteenth = new GregorianCalendar(year, month - 1, 13)
- private val first = new GregorianCalendar(year, month - 1, 1)
- private val nextMonth = first.addMonths(1)
+ private val thirteenth = LocalDate.of(year, month, 13)
+ private val first = LocalDate.of(year, month, 1)
+ private val nextMonth = first.plusMonths(1)
- def teenth(day: Int): Calendar = thirteenth.next(day)
- def first(day: Int): Calendar = first.next(day)
- def second(day: Int): Calendar = first(day).addDays(7)
- def third(day: Int): Calendar = second(day).addDays(7)
- def fourth(day: Int): Calendar = third(day).addDays(7)
- def last(day: Int): Calendar = nextMonth.next(day).addDays(-7)
+ def teenth(day: Int): LocalDate = thirteenth.next(day)
+ def first(day: Int): LocalDate = first.next(day)
+ def second(day: Int): LocalDate = first(day).plusDays(7)
+ def third(day: Int): LocalDate = second(day).plusDays(7)
+ def fourth(day: Int): LocalDate = third(day).plusDays(7)
+ def last(day: Int): LocalDate = nextMonth.next(day).minusDays(7)
- implicit class ImmutableCalendar(calendar: Calendar) {
- def next(dayOfWeek: Int): Calendar = addDays(daysUntil(dayOfWeek))
+ implicit class LocalDateOps(self: LocalDate) {
+ def next(dayOfWeek: Int): LocalDate = self.plusDays(daysUntil(dayOfWeek))
- def addDays(count: Int): Calendar = copyAnd(_.add(Calendar.DAY_OF_YEAR, count))
+ def daysUntil(dayOfWeek: Int): Int = (Meetup.Sun - this.dayOfWeek + dayOfWeek) % 7
- def addMonths(count: Int): Calendar = copyAnd(_.add(Calendar.MONTH, count))
-
- def daysUntil(dayOfWeek: Int): Int = (Meetup.Sat - this.dayOfWeek + dayOfWeek) % 7
-
- def dayOfWeek: Int = calendar.get(Calendar.DAY_OF_WEEK)
-
- private def copy: Calendar = calendar.clone.asInstanceOf[Calendar]
-
- private def copyAnd(f: Calendar => Unit) = {
- val c = copy
- f(c)
- c
- }
+ def dayOfWeek: Int = self.getDayOfWeek.getValue
}
}
object Meetup {
- val Mon = Calendar.MONDAY
- val Tue = Calendar.TUESDAY
- val Wed = Calendar.WEDNESDAY
- val Thu = Calendar.THURSDAY
- val Fri = Calendar.FRIDAY
- val Sat = Calendar.SATURDAY
- val Sun = Calendar.SUNDAY
+ val Mon = DayOfWeek.MONDAY.getValue
+ val Tue = DayOfWeek.TUESDAY.getValue
+ val Wed = DayOfWeek.WEDNESDAY.getValue
+ val Thu = DayOfWeek.THURSDAY.getValue
+ val Fri = DayOfWeek.FRIDAY.getValue
+ val Sat = DayOfWeek.SATURDAY.getValue
+ val Sun = DayOfWeek.SUNDAY.getValue
}