2013-10-17 139 views
7

我需要在scala中创建一个函数,给定一个日期范围,给出一个范围列表。 我在Scala中比较新,我无法弄清楚如何为相同的代码编写正确的'for'循环。这是我迄今为止所做的:给定一个范围,在Scala中获取该范围内的所有日期

def calculateDates(from: LocalDate, until: LocalDate): Seq[LocalDate] = { 
    var dateArray = [] 
    //for (LocalDate date <- from; !date.isAfter(to); date <- date.plusDays(1)) 
    for(date <- from to until) 
    { 
     dateArray :+ date 
    } 
    return dateArray 
} 

我不知道如何迭代范围。

回答

11
val numberOfDays = Days.daysBetween(from, until).getDays() 
for (f<- 0 to numberOfDays) yield from.plusDays(f) 
+0

'天'是Scala中的一个类吗? –

+1

这是joda时间的课程,您似乎正在使用: http://joda-time.sourceforge.net/apidocs/org/joda/time/Days.html – Ashalynd

4

试试这个

要生成每次约会,你可以步骤设置为1天像

val range = dateRange(
<yourstartdate>, 
<yourenddate>, 
Period.days(1)) 
+0

这可能是根据需求,因为具有启动一个贫穷的解决方案=新DateTime(2015,1,30,0,0),end = new DateTime(2015,5,2,0,0),step = Period.months(1)产生“2015-01-30”,“2015- 02-28“,”2015-03-28“,”2015-04-28“,而不是”2015-01-30“,”2015-02-28“,”2015-03-30“,”2015-04 -30“ – jbrown

0

由于Scala是一个功能,去一个递归:

def calculateDates(from: LocalDate, until: LocalDate): Seq[LocalDate] = { 
    if from.compareTo(until) > 1 
     return[] 
    else 
     return from :: calculateDates(from.plusDays(1), until) 
} 
2

使用Lamma Date

$ scala -cp lamma_2.11-1.1.2.jar 
Welcome to Scala version 2.11.0 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_25). 
Type in expressions to have them evaluated. 
Type :help for more information. 

scala> import io.lamma.Date 
import io.lamma.Date 

scala> Date(2015, 7, 7) to Date(2015, 7, 10) foreach println 
Date(2015,7,7) 
Date(2015,7,8) 
Date(2015,7,9) 
Date(2015,7,10) 

This DateRange is lazy way。随意构建5000年的日期范围。 :)

9

如果你碰巧使用java 1.8日期时间API(或它的反向移植1.7 threeten),那么你可以写

def between(fromDate: LocalDate, toDate: LocalDate) = { fromDate.toEpochDay.until(toDate.toEpochDay).map(LocalDate.ofEpochDay) }

相关问题