Groovy:找到上周一的日期

时间:2014-08-01 07:53:23

标签: date groovy

在下面的代码中,我想找到上周一的日期。 为此,我有两个变量:

  • startDay =今天 - 7天
  • stopDay =今天 - 1天(昨天)

我有一个功能,列出“startDay”和“stopDay”之间的所有日期,并搜索这些日期,其中一个对应于星期一。

当我在同一个十年中有两个日期时,它运作良好:

  • startDay = 2014-07-20
  • stopDay = 2014-07-29

但是,当其中一个改变十年时,代码以错误结束:

  • startDay = 2014-07-29
  • stopDay = 2014-07-30

ERROR:

java.lang.IllegalArgumentException:范围不兼容的字符串:字符串#next()将无法达到预期值

CODE:

def searchDay = { start, stop -> (start..stop).findAll { Date.parse("yyyy-MM-dd", "${it}").format("u") == "1" } }
def startDay = new java.text.SimpleDateFormat("yyyy-MM-dd").format(new Date()-7)
def stopDay = new java.text.SimpleDateFormat("yyyy-MM-dd").format(new Date()-1)

def dateOfTheDay = searchDay(startDay, stopDay);
def dateOfTheDayWithoutSquare = dateOfTheDay.join(", ")


return dateOfTheDayWithoutSquare 

2 个答案:

答案 0 :(得分:7)

这将是从今天开始的上一个星期一

def cal = Calendar.instance

while (cal.get(Calendar.DAY_OF_WEEK) != Calendar.MONDAY) {
    cal.add(Calendar.DAY_OF_WEEK, -1)
}

Date lastMonday = cal.time

// print the date in yyyy-MM-dd format
println lastMonday.format("yyyy-MM-dd")

如果您想查找其他日期之前的星期一,请将第一行替换为:

def cal = Calendar.instance
Date someOtherDate = // get a date from somewhere
cal.time = someOtherDate

答案 1 :(得分:5)

这应该更快一点(没有循环):

def cal = Calendar.instance
def diff = Calendar.MONDAY - cal.get(Calendar.DAY_OF_WEEK)
cal.add(Calendar.DAY_OF_WEEK, diff)
cal.time.format("yyyy-MM-dd")