2017-05-29 286 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) 
相关问题