2017-05-30 304 views
-1

我問了一個關於這個here的問題。它工作正常,是一個不錯的解決方案,但是我剛剛意識到,在某些情況下,當未安裝java 1.8時,import java.time不可用。我有Java 1.7並且由於許多其他問題而無法更新。Scala - 獲取選定年份的天數和月份列表

後的Java 1.8

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

以前的Java版本:

如此,例如使用import java.util.{Calendar}怎麼能同一個問題要解決? - >獲取某一年

+1

退房喬達時間爲一個類似圖書館的java-8時間(同一作者)。 http://www.joda.org/joda-time/ – Stephen

+0

它的確如此,它們的命名略有不同。閱讀文檔。 – Dima

回答

1

所有的月份和日期。如果你可以使用喬達時間,以下爲我工作:

import java.util.Calendar 
import org.joda.time.{DateTime, LocalDate, DurationFieldType} 

def allDaysForYear(year: String): List[(String, String, String)] = { 
    val dateTime = new DateTime() 
    val daysInYear = if(dateTime.withYear(year.toInt).year.isLeap) 366 else 365 
    val calendar = Calendar.getInstance 
    calendar.set(year.toInt, 0, 0) 
    val ld = LocalDate.fromCalendarFields(calendar) 
    for { 
    day <- (1 to daysInYear).toList 
    updatedLd = ld.withFieldAdded(DurationFieldType.days, day) 
    } yield (year, updatedLd.getMonthOfYear.toString, updatedLd.getDayOfMonth.toString) 
}