Skip to content
forked from t2v/holidays

The calculator of the Japanese holiday in Scala

Notifications You must be signed in to change notification settings

xuwei-k/holidays

 
 

Repository files navigation

祝日計算 in Scala scaladoc

https://addinbox.sakura.ne.jp/holiday_logic.htm の Scala 移植版です。

  • ※山の日 対応
  • ※東京五輪 臨時祝日 / 体育の日 改名 対応
  • ※生前退位 / 皇位継承 対応
  • ※2019年 臨時休日 対応
  • ※2021年 東京五輪特措法の改正案 対応

導入

Java8 Date&Time API と共に使いたい場合

以下の記述を build.sbt に足してください。 Scala 2.11.x, 2.12.x, 2.13.x, 3.x.y に対応しています。

libraryDependencies += "jp.t2v" %% "holidays" % "7.1"

Joda-Time と共に使いたい場合

Holidaysの依存に nscala-time が含まれなくなったため、個別に nscala-time か joda-time を依存性に追加してください。 Scala 2.11.x, 2.12.x, 2.13.x, 3.x.y に対応しています。

libraryDependencies += "jp.t2v" %% "holidays" % "7.1"
libraryDependencies += "com.github.nscala-time" %% "nscala-time" % "2.22.0"

使い方

Implicit に使う

Java8 Date&Time API

import java.time.LocalDate
import jp.t2v.util.locale.Implicits._

LocalDate.now().holidayName   // Option[String] で休日名
LocalDate.now().isHoliday     // Boolean

LocalDate.of(2012, 9, 22).holidayName // Some("秋分の日")
LocalDate.of(2009, 5,  6).holidayName // Some("振替休日")
LocalDate.of(2012, 9, 10).holidayName // None

LocalDate の他に LocalDateTime および ZonedDateTime をサポートしています。

Joda-Time(with nscala-time)

import com.github.nscala_time.time.Imports._
import jp.t2v.util.locale.Implicits._

DateTime.now.holidayName   // Option[String] で休日名
DateTime.now.isHoliday     // Boolean

new LocalDate(2012, 9, 22).holidayName // Some("秋分の日")
new LocalDate(2009, 5,  6).holidayName // Some("振替休日")
new LocalDate(2012, 9, 10).holidayName // None

LocalDate の他に DateTime をサポートしています。

Explicit に使う

Java8 Date&Time API

import java.time.LocalDate
import jp.t2v.util.locale.Holidays

Holidays(LocalDate.of(2012, 9, 22))  // Some("秋分の日")
Holidays(LocalDate.of(2009, 5,  6))  // Some("振替休日")
Holidays(LocalDate.of(2012, 9, 10))  // None

Joda-Time(with nscala-time)

import com.github.nscala_time.time.Imports._
import jp.t2v.util.locale.Holidays

Holidays(new LocalDate(2012, 9, 22))  // Some("秋分の日")
Holidays(new LocalDate(2009, 5,  6))  // Some("振替休日")
Holidays(new LocalDate(2012, 9, 10))  // None

LocalDate の他に DateTime をサポートしています。

パターンマッチにも

import java.time.LocalDate
import jp.t2v.util.locale.Holidays

val start = LocalDate.of(2012, 4, 28)
val end = LocalDate.of(2012, 5, 6)
val days: Seq[LocalDate] = Stream.iterate(start)(_.plusDays(1)).takeWhile(end >)

val names = days.map {
  case Holidays(name) => name
  case _              => "平日"
}

names == Seq("平日", "昭和の日", "振替休日", "平日", "平日", "憲法記念日", "みどりの日", "こどもの日")

Java8 LocalDate, LocalDateTime, ZonedDateTime および Joda-Time LocalDate, DateTime をサポートしています。

独自の日時データ型や外部ライブラリの日時型と使う

LocalDateConverter という型クラスが用意されています。

abstract class LocalDateConverter[A] {
  def apply(value: A): java.time.LocalDate
}

独自の日時データ型に対して LocalDateConverter の型クラスインスタンスを定義することで、独自の日時データ型からも利用できるようになります。