Datetime Groovy—编写最后一个工作日(月的第一天)的惯用方法

Datetime Groovy—编写最后一个工作日(月的第一天)的惯用方法,datetime,groovy,calendar,idioms,Datetime,Groovy,Calendar,Idioms,问过去最后一个工作日(比如周一)是什么样的习惯用法? (或本周,一周的第一天) 问当前月份,月的第一个月也有类似的情况吗?一年前,我写了一篇文章,这让你可以做: def mondayInJuly = new DateDSL().with { first.monday.in.july( 2011 ) } 它将mondayInJuly设置为表示 Mon Jul 04 00:00:00 UTC 2011 我需要更新脚本以允许您使用Groovy 1.8更宽松的解析器正如您在标记中提到的DateT

问过去最后一个工作日(比如周一)是什么样的习惯用法? (或本周,一周的第一天)

问当前月份,月的第一个月也有类似的情况吗?

一年前,我写了一篇文章,这让你可以做:

def mondayInJuly = new DateDSL().with {
  first.monday.in.july( 2011 )
}
它将
mondayInJuly
设置为表示

Mon Jul 04 00:00:00 UTC 2011

我需要更新脚本以允许您使用Groovy 1.8更宽松的解析器

正如您在标记中提到的
DateTime
一样,我建议JodaTime可以。因此,我们:

def lastMonday = 
  new DateTime().withDayOfWeek(DateTimeConstants.MONDAY).minusWeeks(1)
def firstThisMoth = new DateTime().withDayOfMonth(1)

尽管它不是特定于Groovy,但在这里可能非常有用。这是最棒的方式,亲爱的!我喜欢这种方法+1几个问题我需要如何调整它以使星期一成为一周的第一天?在比较新日期(2011,7,6)和新日期(2011,7,5)时,我得到了两个不同的星期六。您在修改方法参数吗?一个令人讨厌的副作用。是的,我确实改变了参数——在我的特殊情况下,这是可以的,但总的来说肯定不是一个好主意。谢谢你指出这一点!dayOfWeek返回1到7,其中1是星期天。因此,我们的一周从周六开始
static Date firstDayInWeek(Date day) {
    day.clearTime()
    return day - day.calendarDate.dayOfWeek
}