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
相关产品推荐
相关产品推荐

