Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Date Groovy:查找上一个星期一的日期_Date_Groovy - Fatal编程技术网

Date Groovy:查找上一个星期一的日期

Date Groovy:查找上一个星期一的日期,date,groovy,Date,Groovy,在下面的代码中,我想查找最后一个星期一的日期。 为此,我有两个变量: startDay=今天-7天 stopDay=今天-1天(昨天) 我有一个函数,列出“startDay”和“stopDay”之间的所有日期,并搜索这些日期,哪一个对应于星期一 如果我在同一个十天内有两次约会,效果会很好: 起始日期=2014-07-20 stopDay=2014-07-29 但是,当两者中的一个发生变化时,代码以错误结束: 起始日期=2014-07-29 停止日期=2014-07-30 错误: ja

在下面的代码中,我想查找最后一个星期一的日期。 为此,我有两个变量:

  • startDay=今天-7天
  • stopDay=今天-1天(昨天)
我有一个函数,列出“startDay”和“stopDay”之间的所有日期,并搜索这些日期,哪一个对应于星期一

如果我在同一个十天内有两次约会,效果会很好:

  • 起始日期=2014-07-20
  • stopDay=2014-07-29
但是,当两者中的一个发生变化时,代码以错误结束:

  • 起始日期=2014-07-29
  • 停止日期=2014-07-30
错误:

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

代码:

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 

这将查找从今天开始的前一个星期一

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

这应该是更快的触摸(无循环):


使用joda,然后使用它:
@Grab(group='joda-time',module='joda-time',version='2.4')import org.joda.time.LocalDate import org.joda.time.DateTimeConstants println LocalDate.now().withDayOfWeek(DateTimeConstants.MONDAY)
谢谢@cfrick,我不知道joda/joda-time,但似乎很简单。最后,谢谢你的回答!它可以工作,但如果您能告诉我如何将其格式化为(“yyyy-MM-dd”)格式?(我是一个新的编码者!将其用于我的Web服务测试)。我尝试了:Date lastMonday=cal.time.format(“yyyy-MM-dd”),但最终出现了以下错误:org.codehaus.groovy.runtime.typehandling.GroovyCastException:无法将类为“java.lang.String”的对象“2014-07-26”强制转换为类为“java.util.Date”。对于我来说,这给出了一个未来的日期,测试的当前日期为2021年5月9日,上周六需要,但我得到了2021年5月15日
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")