groovy日期:2011年所有星期五的构建列表

groovy日期:2011年所有星期五的构建列表,groovy,Groovy,如何建立2011年所有星期五的列表,并允许不同的日期输出,例如mm/dd/yyyy和yyyyymmdd?我会这样做: use (groovy.time.TimeCategory) { def d = Date.parse("MM/dd/yyyy", "01/01/2011") while (d[Calendar.DAY_OF_WEEK] != Calendar.FRIDAY) { d = d + 1.day } while (d[Calendar.

如何建立2011年所有星期五的列表,并允许不同的日期输出,例如mm/dd/yyyy和yyyyymmdd?

我会这样做:

use (groovy.time.TimeCategory) {
    def d = Date.parse("MM/dd/yyyy", "01/01/2011")
    while (d[Calendar.DAY_OF_WEEK] != Calendar.FRIDAY) {
        d = d + 1.day
    }
    while (d[Calendar.YEAR] == 2011) {
        println d.format("MM/dd/yyyy")
        d = d + 1.week
    }
}

我会这样说:

use (groovy.time.TimeCategory) {
    def d = Date.parse("MM/dd/yyyy", "01/01/2011")
    while (d[Calendar.DAY_OF_WEEK] != Calendar.FRIDAY) {
        d = d + 1.day
    }
    while (d[Calendar.YEAR] == 2011) {
        println d.format("MM/dd/yyyy")
        d = d + 1.week
    }
}

除了ataylor的正确答案之外,您还可以:

import static java.util.Calendar.*

def s = Date.parse("MM/dd/yyyy", "01/01/2011")
def e = Date.parse("MM/dd/yyyy", "12/31/2011")

(s..e).findAll {
  it[ DAY_OF_WEEK ] == FRIDAY
}.each {
  println it.format("MM/dd/yyyy")
}

除了ataylor的正确答案之外,您还可以:

import static java.util.Calendar.*

def s = Date.parse("MM/dd/yyyy", "01/01/2011")
def e = Date.parse("MM/dd/yyyy", "12/31/2011")

(s..e).findAll {
  it[ DAY_OF_WEEK ] == FRIDAY
}.each {
  println it.format("MM/dd/yyyy")
}

ataylor和Tim的答案都是正确的,而且信息量很大——如果您想了解Groovy的最新进展,请参阅注释


我讨厌这种情况,我应该选择一个作为答案,而不是另一个。他们都是正确的答案。Stackoverflow不会改变他们的内容,所以我可以选择两者都正确,所以我只会指出两者都是正确的。

ataylor和Tim的答案都是正确的,而且信息非常丰富——如果您要在Groovy上加速,请参阅注释


我讨厌这种情况,我应该选择一个作为答案,而不是另一个。他们都是正确的答案。Stackoverflow不会更改它们的内容,因此我可以选择两者都正确,因此我只会指出两者都正确。

简单的解决方案似乎是直截了当的;从1月1日开始,向前扫描到周五,然后是日期。再加上(7),直到你不再在同一年。格式化是用普通的方法处理的;从1月1日开始,向前扫描到周五,然后是日期。再加上(7),直到你不再在同一年。格式化是用普通方法处理的。谢谢你的回答。我查阅了上面的“use”语法,但是我得到了太多的点击率你能解释一下它的作用吗,或者给我一个参考。它把一个类中的方法应用到其他类中。在本例中,TimeCategory将方法
getDay()
getWeek()
添加到integer中,因此您可以使用可读性极强的符号
1.day
1.week
来表示时间持续时间。太酷了。我能更多地了解这个一般机制吗?也就是说,groovy文档在哪里?请查看。谢谢,太好了。我明白你们现在所说的关于类别的内容了——我原以为它是这个例子特有的,但它确实是一般性的。再次感谢@ataylorThanks的回答。我查阅了上面的“use”语法,但是我得到了太多的点击率你能解释一下它的作用吗,或者给我一个参考。它把一个类中的方法应用到其他类中。在本例中,TimeCategory将方法
getDay()
getWeek()
添加到integer中,因此您可以使用可读性极强的符号
1.day
1.week
来表示时间持续时间。太酷了。我能更多地了解这个一般机制吗?也就是说,groovy文档在哪里?请查看。谢谢,太好了。我明白你们现在所说的关于类别的内容了——我原以为它是这个例子特有的,但它确实是一般性的。再次感谢@ataylorThanks Tim,这也很棒。Tim,你怎么知道(s..e)会建立一系列的日期?(我还是一个“新手”!:-)我的意思是我知道(1..5)或两个整数等可以建立一个范围,但是人们怎么知道可以在什么东西上建立范围呢?@Ray任何类都可以在一个范围内,只要它实现,
java.util.Comparable
接口(其中):-)啊,太好了,谢谢。您的答案和Ataylors都非常有用/信息丰富。我写Stackoverflow是因为我讨厌这种情况,因为你们只能在答案上选择。谢谢你帮助我更好地理解这一系列的东西。祝你度过愉快的一天/晚上。谢谢蒂姆,这也很棒。蒂姆,你怎么知道(s..e)会安排一系列的约会?(我还是一个“新手”!:-)我的意思是我知道(1..5)或两个整数等可以建立一个范围,但是人们怎么知道可以在什么东西上建立范围呢?@Ray任何类都可以在一个范围内,只要它实现,
java.util.Comparable
接口(其中):-)啊,太好了,谢谢。您的答案和Ataylors都非常有用/信息丰富。我写Stackoverflow是因为我讨厌这种情况,因为你们只能在答案上选择。谢谢你帮助我更好地理解这一系列的东西。祝你度过愉快的一天/晚上。我接受阿泰洛的回答。他是第一个,他的工作做得更少,因为它位于第一个星期五,然后增加7天,以获得每个连续的一个(因此最多将做58步)。我的将在一年中的每一天进行,删除那些不是星期五的。我会接受阿泰洛的回答。他是第一个,他的工作做得更少,因为它位于第一个星期五,然后增加7天,以获得每个连续的一个(因此最多将做58步)。我的工作将在一年中的每一天进行,删除那些不是星期五的工作。