2017-05-29 5 views
1

特定の年のすべての曜日のシーケンスを文字列の日付トリプル(年、月、日)として返す関数を作成する必要があります。Scala - 特定の年のすべての月と日を取得する

def allDaysForYear(year: String) = { 
...// get every month and day for that $year 

    } 

それから私は、この方法で使用します。私の試みにおいて

for ((year, month, day) <- allDaysForYear("2017")) 
     yield doSomethingElse(p(year), p(month), p(day)) 

私はカレンダーオブジェクトとイテレータ[カレンダー]を使用しますが、清潔で、小さなコードを持って管理していませんでした。

これはアーカイブには複雑ではないようですが、おそらく誰かが日付の扱い方についてより良いアイデアを持っています。

Scalaでこれを実行する最も効率的な方法は何ですか?

おかげ

答えて

2

私が理解するための単純なでこれを行うことができたとjava.time.LocalDatejava.time.Year

import java.time.{LocalDate, Year} 

    def allDaysForYear(year: String): List[(String, String, String)] = { 
     val daysInYear = if(Year.of(year.toInt).isLeap) 366 else 365 
     for { 
     day <- (1 to daysInYear).toList 
     localDate = LocalDate.ofYearDay(year.toInt, day) 
     month = localDate.getMonthValue 
     dayOfMonth = localDate.getDayOfMonth 
     } yield (year, month.toString, dayOfMonth.toString) 
    } 
+1

これは飛躍のために動作するようには思えません年 - 例えば2016年12月31日が欠落しています。 – rippleslash

+0

更新されたコードを見てください(別のjava.timeのインポートを追加するために必要な閏年を考慮に入れて) – Tanjin

+0

Java 1.8がインストールされている場合、その場合、 'import java.time'は利用できません。代わりに何を使うことができますか? –

0

使用Lamma Date

Date(2015, 1, 1) to Date(2015, 12, 131) foreach println 

Date(2015,1,1) 
Date(2015,1,2) 
Date(2015,1,3) 
Date(2015,1,4) 
関連する問題