Scala-获取选定年份的日期和月份列表 [英] Scala - Get list of days and months for a selected year

查看:442
本文介绍了Scala-获取选定年份的日期和月份列表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我问了一个与此有关的问题这里。它工作正常并且是一个很好的解决方案,但是我刚刚意识到,在某些情况下,当未安装Java 1.8时, import java.time 不可用。我有Java 1.7,由于许多其他问题而无法更新。

I asked a question regarding this here. It works fine and is a nice solution, however I just realized that in some cases when java 1.8 is NOT installed import java.time is not available. I have java 1.7 and cannot update due many other issues.

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。{日历} 如何解决同一问题? -> 获取给定年份的所有月份和日期

so, for instance using import java.util.{Calendar} how can the same issue be solved? -> Get all months and days for a given year

推荐答案

如果可以使用Joda-Time ,以下代码对我有用:

If you can use Joda-Time, the following worked for me:

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

这篇关于Scala-获取选定年份的日期和月份列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆