【发布时间】:2012-03-04 13:14:21
【问题描述】:
我有一种情况需要我列出过去 12 个月的情况。
例子:
当前月份是 3 月,当前年份是 2012 年。所以我想得到一个如下所示的列表:
3 月 (2011 年)、4 月 (2011 年)...12 月 (2011 年)、1 月 (2012 年)、2 月 (2012 年) 和 3 月 (2012 年)。
我一直在尝试使用日期和日历来完成这项工作,但我并没有设法让算法正确。
有什么想法吗?
【问题讨论】:
我有一种情况需要我列出过去 12 个月的情况。
例子:
当前月份是 3 月,当前年份是 2012 年。所以我想得到一个如下所示的列表:
3 月 (2011 年)、4 月 (2011 年)...12 月 (2011 年)、1 月 (2012 年)、2 月 (2012 年) 和 3 月 (2012 年)。
我一直在尝试使用日期和日历来完成这项工作,但我并没有设法让算法正确。
有什么想法吗?
【问题讨论】:
这是一个 Groovy 的方法:
use(groovy.time.TimeCategory) {
def today = new Date()
println today
12.times { i ->
println today - (i+1).months
}
}
您可以阅读有关 Groovy 日期的更多信息here
【讨论】:
这是基于 doelleri 建议的完整、可运行的版本:
use(groovy.time.TimeCategory) {
def today = new Date()
13.times { i ->
println( (today - i.months).format('MMMM (yyyy)') )
}
}
我所做的更改:
format 方法完全按照您的要求呈现日期。如果您希望输出排列得更好,请尝试使用 'MMM (yyyy)' 作为格式,它使用 3 个字母的月份。您可能希望将这些作为列表获取,因此最好使用:
def months
use(groovy.time.TimeCategory) {
def today = new Date()
months = (0..13).collect { (today - it.months).format('MMMM (yyyy)') }
}
它将月份数据存储到一个名为months的数组中。
【讨论】:
def months = [] 然后用13.times { months << ... }