如何将Joda Time生成的日期范围转换为yyyy-MM-dd格式?
解决Joda Time日期格式化的问题
嗨,我来帮你搞定这个问题~你遇到的错误核心是搞反了「格式化」和「解析」的方法:
你现在用的dtf.parseDateTime(d.toString)是把字符串解析成DateTime对象,但你实际需要的是把已有的DateTime对象转换成指定格式的字符串,这时候应该用format方法而不是parseDateTime。
正确的实现代码
import org.joda.time.DateTime import org.joda.time.format.DateTimeFormat // 获取当前时间 val now = DateTime.now() // 定义日期格式化器 val dtf = DateTimeFormat.forPattern("yyyy-MM-dd") // 生成日期范围并格式化输出 (0 until 5).map(now.minusDays(_)).foreach(date => println(dtf.format(date)))
代码解释
DateTimeFormat.forPattern("yyyy-MM-dd"):创建符合你需求的格式化规则dtf.format(date):将DateTime对象按照指定格式转换成yyyy-MM-dd格式的字符串,这才是你需要的操作- 如果想直接生成格式化后的字符串列表,也可以简化写法:
val formattedDates = (0 until 5).map(n => dtf.format(now.minusDays(n))) formattedDates.foreach(println)
之前的错误是因为你把DateTime对象转成默认字符串后,用parseDateTime去解析它,但默认的DateTime字符串格式和yyyy-MM-dd不匹配,所以触发了Invalid format异常。
内容的提问来源于stack exchange,提问作者Markus
相关产品推荐
相关产品推荐

