0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

指定した年月日の営業日を求めるプログラム

Last updated at Posted at 2018-03-03

お仕事にてJavaで営業日を求めるプログラムを作成したが、Scalaではどうやるのか疑問に思ってちょっとコーディングしてみた。
以下の例は、仮に2018年3月26日を指定した時の3月の営業日一覧を返してくれる。

package test
import java.util.Date
import org.joda.time._
import org.joda.time.format._

/*
 * 指定した年月日の営業日を一覧で出す
 */
object Main extends App {
  
  // 祝日セット
  val yearCalendar = Map( 201801 -> List(1,2,3), 201802 -> List(10), 201803 -> List(21), 201804 -> List(30), 201805 -> List(3,4,5))
  // 日付
  val year = 2018
  val month = 3
  val day = 26
  
   (1 to day).toList
    .map( x => new DateTime(year, month, x, 0 ,0 ,0 ) )
    .filter( x => x.dayOfWeek().get == Week.MONDAY.value || x.dayOfWeek().get == Week.TUESDAY.value ||
                x.dayOfWeek().get == Week.WEDNESDAY.value || x.dayOfWeek().get == Week.THURSDAY.value ||
                x.dayOfWeek().get == Week.FRIDAY.value)
    .filterNot(x => yearCalendar.getOrElse( DateTimeFormat.forPattern("yyyyMM").print(x).toInt , List(Int) ).contains(x.getDayOfMonth) )
    .foreach( x => println( DateTimeFormat.forPattern("yyyy-MM-dd").print(x) ) )
}


結果は以下の通り。ちゃんととれてるjoda..。

2018-03-01
2018-03-02
2018-03-05
2018-03-06
2018-03-07
2018-03-08
2018-03-09
2018-03-12
2018-03-13
2018-03-14
2018-03-15
2018-03-16
2018-03-19
2018-03-20
2018-03-22
2018-03-23
2018-03-26

DateクラスのEnumがなかったので書いてみた。以下リンクのサイト参考。


trait EnumLike {
  type Value
  def value: Value
}
trait Enum[T] extends EnumLike {
  type Value = T
}
trait EnumCompanion[A <: EnumLike] {
  def values: Seq[A]
  def valueOf(value: A#Value): Option[A] = values.find(_.value == value)
}

abstract sealed class WeekType(val value: Int) extends Enum[Int]
object Week extends EnumCompanion[WeekType] {
  case object MONDAY extends WeekType(1)
  case object TUESDAY extends WeekType(2)
  case object WEDNESDAY extends WeekType(3)
  case object THURSDAY extends WeekType(4)
  case object FRIDAY extends WeekType(5)
  lazy val values = Seq(MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY)
}

参考:
[リンク] https://gist.github.com/gakuzzzz/4ad53153e28b3a6e0aa6

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?