You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scala中如何获取今日日期并生成过去5天的日期列表?

在Scala中生成过去5天的日期列表

嘿,我来帮你搞定这个日期处理的问题!你已经有了一个不错的开头,我来帮你补全代码,同时也给你推荐更现代、更安全的实现方式。

补全你现有代码的方案(基于java.util.Date/Calendar)

你的代码里用了java.util.Date和SimpleDateFormat,虽然这些类现在有些过时,但我们可以用Calendar来完成日期加减的操作,补全prev_day的逻辑:

import scala.collection.mutable.ArrayBuffer
val dateFormatter = new java.text.SimpleDateFormat("yyyy-MM-dd")
var today_date = new java.util.Date()
var today = dateFormatter.format(today_date)
var lst_5_days = ArrayBuffer[String]()
for(i <- 1 to 5) {
  // 用Calendar处理日期加减
  val calendar = java.util.Calendar.getInstance()
  calendar.setTime(today_date)
  // 减去i天
  calendar.add(java.util.Calendar.DAY_OF_MONTH, -i)
  val prev_day = dateFormatter.format(calendar.getTime())
  lst_5_days += prev_day
}

这里的核心是用Calendar.add(Calendar.DAY_OF_MONTH, -i)来实现日期的减法,因为java.util.Date本身的加减方法已经被标记为废弃了,用Calendar是更稳妥的做法。

推荐:使用Java 8+的java.time API(更现代、更安全)

SimpleDateFormat和Calendar都存在线程不安全的问题,而且API设计不够直观。现在更推荐使用Java 8引入的java.time包(Scala完全支持这个API),它的类都是不可变且线程安全的,代码也更简洁:

import java.time.LocalDate
import java.time.format.DateTimeFormatter
import scala.collection.mutable.ArrayBuffer

// 线程安全的日期格式化器
val dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd")
// 获取今日日期(仅日期部分,不含时间)
val today = LocalDate.now()
val lst_5_days = ArrayBuffer[String]()

for(i <- 1 to 5) {
  // 直接调用minusDays方法减去i天,非常直观
  val prevDay = today.minusDays(i)
  lst_5_days += dateFormatter.format(prevDay)
}

// 如果你喜欢函数式风格,还可以不用循环,一行搞定:
val lst_5_days_functional = (1 to 5).map(i => today.minusDays(i).format(dateFormatter)).toBuffer

这个方案里,LocalDate专门用来处理日期(不含时间),minusDays方法直接实现日期减法,DateTimeFormatter是线程安全的,比SimpleDateFormat靠谱得多。函数式的写法也更符合Scala的风格,避免了可变变量的使用。

内容的提问来源于stack exchange,提问作者Santhosh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:31:33