2013-10-17 7 views
7

में उस सीमा के भीतर सभी तिथियां प्राप्त करने के लिए मुझे एक सीमा दी गई है, मुझे स्केल में एक फ़ंक्शन बनाने की आवश्यकता है, जो कि कई तिथियों के बाद, मुझे सीमा की एक सूची देता है। मैं स्कैला में अपेक्षाकृत नया हूं और मैं यह समझने में सक्षम नहीं हूं कि इसके लिए 'लूप' के लिए सही तरीका कैसे लिखना है। मैंने अभी तक यह किया है:स्केल

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

स्केल में 'दिन' कक्षा है? –

+1

यह जोडा-टाइम में एक वर्ग है जिसका आप उपयोग कर रहे हैं: http://joda-time.sourceforge.net/apidocs/org/joda/time/Days.html – Ashalynd

4

इस

प्रयास करें हर तारीख उत्पन्न करने के लिए, आप की तरह

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

यह एक गरीब समाधान क्योंकि शुरुआत के साथ जरूरतों के आधार पर हो सकता है = नई डेटटाइम (2015, 1, 30, 0, 0), अंत = नया डेटटाइम (2015, 5, 2, 0, 0), चरण = अवधि। माह (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

1 दिन के लिए कदम सेट कर सकते हैं के बाद से स्काला एक कार्यात्मक, एक प्रत्यावर्तन के साथ जाना:

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

का उपयोग करें 0

$ 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) 

यह DateRange एक आलसी तरह से मूल्यांकन किया जाता है। 5000 साल की तिथि सीमा बनाने के लिए स्वतंत्र महसूस करें। :)

9

आप जावा 1.8 datetime एपीआई (या इसके 1.7 backport threeten) का उपयोग होता है, तो आप लिख सकते हैं

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