【问题标题】:Groovy - idiomatic way of coding The Last Weekday - First of MonthGroovy - 惯用的编码方式 The Last Weekday - First of Month
【发布时间】:2011-06-30 17:05:48
【问题描述】:

询问过去最后一个工作日(例如星期一)的 Groovy 惯用方式是什么? (或本周,一周的第一天)?

也有类似的要求当前月份,当月的第一个月?

【问题讨论】:

标签: datetime groovy calendar idioms


【解决方案1】:
static Date firstDayInWeek(Date day) {
    day.clearTime()
    return day - day.calendarDate.dayOfWeek
}

【讨论】:

  • 我喜欢这种方法。 +1几个问题我需要如何调整它才能将星期一作为一周的第一天?比较新日期(2011,7,6)和新日期(2011,7,5)时,我得到两个不同的星期六
  • 你在修改方法参数吗?一个令人讨厌的副作用。
  • 是的,我确实更改了参数 - 在我的特殊情况下这没问题,但总的来说肯定不是一个好主意。感谢您指出这一点!
  • dayOfWeek 返回 1 到 7,其中 1 是星期日。因此,我们的一周从星期六开始
【解决方案2】:

一年前,我写了一个simple DSL for calculating dates,这让你可以这样做:

def mondayInJuly = new DateDSL().with {
  first.monday.in.july( 2011 )
}

mondayInJuly 设置为代表日期的对象

Mon Jul 04 00:00:00 UTC 2011

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

【讨论】:

  • 这是最时髦的方式,亲爱的!
【解决方案3】:

正如您在标签中提到的DateTime,我建议JodaTime 是可以的。所以,我们这样做:

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

【讨论】:

    猜你喜欢
    • 2014-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-02
    • 2022-12-02
    • 1970-01-01
    • 2020-10-11
    • 1970-01-01
    相关资源
    最近更新 更多