2017-05-29 287 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)) 

在我嘗試我用日曆對象和Iterator [日曆],但沒有管理有一個乾淨的小碼。

這看起來並不複雜,也許有人對如何處理日期有更好的想法。

在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) 
相關問題