使用Scala从给定月份获取前12个月的月底日期

Posted

技术标签:

【中文标题】使用Scala从给定月份获取前12个月的月底日期【英文标题】:Get previous 12months with month end date from given month using Scala 【发布时间】:2021-08-12 07:28:27 【问题描述】:

我有一个用例从给定日期获取过去 12 个月的结束日期。

例如,如果我输入为 ('2021-04-23'),则输出应为:

输出1 = ('2021-04-30', '2021-03-31', '2021-02-28', '2021-01-31', '2020-12-31', ' 2020-11-30'、'2020-10-31'、'2020-09-30'、'2020-08-31'、'2020-07-31'、'2020-06-30'、'2020- 05-31', '2020-04-30')

output2=('2021-04-01','2021-03-01','2021-02-01','2021-01-01','2020-12-01',' 2020-11-01','2020-10-01','2020-09-01','2020-08-01','2020-07-01','2020-06-01','2020- 05-01','2020-04-01')

我有代码 sn-p

import java.time.format.DateTimeFormatter

val monthDate = DateTimeFormatter.ofPattern("yyyy-MM")
val start = YearMonth.parse("2021-04", monthDate
val lastTwelveMonths=(0 to 12).map(x => start.minusMonths(x).format(monthDate)).toList

从当前月份返回过去 12 个月,任何人都可以提供包括过去 12 个月结束日期的解决方案。谢谢

【问题讨论】:

【参考方案1】:

您可以使用java.time.LocalDatewithDayOfMonth() 来满足您的需要:

import java.time.LocalDate
import java.time.format.DateTimeFormatter

val dateFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd")
val inputDate = LocalDate.parse("2021-04-23")

(0 to 12).map n =>
  inputDate.minusMonths(n).withDayOfMonth(1).format(dateFormat)

// Vector(2021-04-01, 2021-03-01, 2021-02-01, 2021-01-01, 2020-12-01, 2020-11-01, 2020-10-01, 2020-09-01, 2020-08-01, 2020-07-01, 2020-06-01, 2020-05-01, 2020-04-01)

(0 to 12).map n => 
  val prevDate = inputDate.minusMonths(n)
  prevDate.withDayOfMonth(prevDate.lengthOfMonth).format(dateFormat)

// Vector(2021-04-30, 2021-03-31, 2021-02-28, 2021-01-31, 2020-12-31, 2020-11-30, 2020-10-31, 2020-09-30, 2020-08-31, 2020-07-31, 2020-06-30, 2020-05-31, 2020-04-30)

【讨论】:

以上是关于使用Scala从给定月份获取前12个月的月底日期的主要内容,如果未能解决你的问题,请参考以下文章

如何在SHELL获取当天时间的月份和上个月的月份还有下个月的月份

给定一个 NSDate,找到前第四个月的最后一天

如何在sql中从给定的月份和年份获取月份的第一天和最后一天

按月查询获取前n个月的平均值

如何使用月份名称获取最近 3 个月的计数,如果该月份没有记录需要使用月份名称获取 0 [重复]

根据当前日期获取前 3 个月的数据 - MySQL