Scala - 获取特定年份的所有月份和日期
问题描述:
我需要创建一个函数,以字符串日期三元组(年,月,日)的形式返回给定年份所有日期的序列。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中执行此操作的最有效方法是什么?
感谢
答
我可以用一个简单的做到这一点的理解和java.time.LocalDate
和java.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)
}
答
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)
这似乎并不为飞跃工作年 - 例如2016年12月31日失踪。 – rippleslash
查看更新后的代码(现在考虑到闰年,需要添加另一个java.time导入) – Tanjin
安装java 1.8时出现这种情况,如果是较低版本,该怎么办?在这种情况下'import java.time'不可用,可以使用什么呢? –