完成Joda Time示例的Groovy方法是什么:
app/vendor/bundle/gems/bootstrap-sass-3.3.5/assets/stylesheets/.
一周超过1天的情况:星期一和星期二,例如
答案 0 :(得分:1)
根据您的开始和结束日期参数,使用以下Groovy代码(使用Groovy Date.parse()
和Date.format()
混合函数,Groovy Date + int
添加,Groovy String
到{ {1}}强制,以及一些代数)似乎可以解决这个问题:
int
话虽如此,底部的Date startDate = Date.parse("yyyy-MM-dd","2016-11-08")
Date endDate = Date.parse("yyyy-MM-dd","2017-05-01")
Date mondayStart = startDate + 6 - ((5 + (startDate.format("u") as int)) % 7)
while (mondayStart < endDate) {
println mondayStart
mondayStart += 7
}
循环有点......“开放式”。您可以使用Groovy的while
文字语法和Range
混合函数获得更具分析性的等价物。以下内容仅替换 上面的List.step()
循环:
while
为了与一周中的其他日子一起工作,我们需要使用基于星期几的合适子表达式替换(mondayStart..<endDate).step(7) { stepDate ->
println stepDate
}
作业中的常量5
。幸运的是,以下表达式非常有效:
mondayStart
将整个事物放在一起并按摩一下,它看起来像这样:
7 - Calendar."${weekDay.toUpperCase()}"
定义了该函数,以下测试代码:
def weekDaysInDateRange(Date startDate, Date endDate, String weekDay = "monday") {
startDate = startDate.clearTime()
endDate = endDate.clearTime()
def offset = 7 - Calendar."${weekDay.toUpperCase()}"
def startDOW = startDate.format("u") as int
def weekDayStartDate = startDate + 6 - (offset + startDOW) % 7
(weekDayStartDate..<endDate).step(7) { stepDate ->
println (stepDate.format("yyyy-MM-dd"))
}
}
给出以下结果:
def now = new Date()
def nextMonthIsh = new Date() + 30
println "$now --> $nextMonthIsh"
println "============================================================="
["sunday", "monday", "tuesday", "wednesday", "thursday", "friday", "saturday"]
.each { weekDay ->
println """
$weekDay
=========="""
weekDaysInDateRange(now, nextMonthIsh, weekDay)
}