All Downloads are FREE. Search and download functionalities are using the official Maven repository.

java.time.chrono.IsoChronology.scala Maven / Gradle / Ivy

package java.time.chrono

import scala.collection.JavaConverters._

import java.time.{Period, LocalDate}
import java.time.temporal.{ValueRange, ChronoField, TemporalAccessor}
import java.{util => ju}

final class IsoChronology private () extends AbstractChronology with Serializable {
  def getId(): String = "ISO"

  def getCalendarType(): String = "iso8601"

  override def date(era: Era, yearOfEra: Int, month: Int, dayOfMonth: Int): LocalDate =
    date(prolepticYear(era, yearOfEra), month, dayOfMonth)

  def date(prolepticYear: Int, month: Int, dayOfMonth: Int): LocalDate =
    LocalDate.of(prolepticYear, month, dayOfMonth)

  override def dateYearDay(era: Era, yearOfEra: Int, dayOfYear: Int): LocalDate =
    dateYearDay(prolepticYear(era, yearOfEra), dayOfYear)

  def dateYearDay(prolepticYear: Int, dayOfYear: Int): LocalDate =
    LocalDate.ofYearDay(prolepticYear, dayOfYear)

  def dateEpochDay(epochDay: Long): LocalDate = LocalDate.ofEpochDay(epochDay)

  def date(temporal: TemporalAccessor): LocalDate = LocalDate.from(temporal)

  // TODO
  // def localDateTime(temporal: TemporalAccessor): LocalDateTime

  // Not implemented
  // def zonedDateTime(temporal: TemporalAccessor): ZonedDateTime
  // def zonedDateTime(instant: Instant, zone: ZoneId): ZonedDateTime

  override def dateNow(): LocalDate = LocalDate.now()

  // Not implemented
  // def dateNow(zone: ZoneId): ChronoLocalDate
  // def dateNow(clock: Clock): ChronoLocalDate

  def isLeapYear(prolepticYear: Long): Boolean = {
    (prolepticYear % 400 == 0) ||
    (prolepticYear % 4 == 0 && prolepticYear % 100 != 0)
  }

  def prolepticYear(era: Era, yearOfEra: Int): Int = era match {
    case IsoEra.CE  => yearOfEra
    case IsoEra.BCE => 1 - yearOfEra
    case _          => throw new ClassCastException("Era must be IsoEra")
  }

  def eraOf(eraValue: Int): IsoEra = IsoEra.of(eraValue)

  def eras(): ju.List[Era] = Seq[Era](IsoEra.BCE, IsoEra.CE).asJava

  // Not implemented
  // def resolveDate(fieldValues: ju.Map[TemporalField, Long],
  //     resolverStyle: java.time.format.ResolverStyle): ChronoLocalDate

  def range(field: ChronoField): ValueRange = field.range()

  override def period(years: Int, months: Int, days: Int): Period =
    Period.of(years, months, days)
}

object IsoChronology {
  final val INSTANCE = new IsoChronology()
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy