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 }