Macos Mac dayofweek问题

Macos Mac dayofweek问题,macos,date,groovy,Macos,Date,Groovy,有人知道为什么下面的代码在Windows而不是Mac上正常工作吗?? 根据MacOS,今天(2010年11月24日)应返回47而不是48 def fm_date = '24/11/2010' import java.text.SimpleDateFormat def lPad = {it -> st = '00' + it.toString() return st.substring(st.length()-2, st.length()) } dfm = new SimpleDate

有人知道为什么下面的代码在Windows而不是Mac上正常工作吗?? 根据MacOS,今天(2010年11月24日)应返回47而不是48

def fm_date = '24/11/2010'

import java.text.SimpleDateFormat

def lPad = {it ->
st = '00' + it.toString()
return st.substring(st.length()-2, st.length())
}

dfm = new SimpleDateFormat("dd/MM/yyyy")
cal=Calendar.getInstance()
cal.setTime( dfm.parse(fm_date) )
now = cal.get(Calendar.WEEK_OF_YEAR)
cal.add(Calendar.DAY_OF_MONTH,-7)
prev = cal.get(Calendar.WEEK_OF_YEAR)
cal.add(Calendar.DAY_OF_MONTH,14)
next = cal.get(Calendar.WEEK_OF_YEAR)
prev = 'diary' + lPad(prev) + '.shtml'
next = 'diary' + lPad(next) + '.shtml'
return 'diary' + lPad(now) + '.shtml'

我相信这是一个ISO周号问题

如果我使用您的代码改编(和groovyfied):

import java.text.SimpleDateFormat

def fm_date = '24/11/2010'

Calendar.getInstance().with { cal ->
  // We want ISO Week numbers
  cal.firstDayOfWeek = MONDAY
  cal.minimalDaysInFirstWeek = 4

  setTime new SimpleDateFormat( 'dd/MM/yyyy' ).parse( fm_date )
  now = cal[ WEEK_OF_YEAR ]
}

"diary${"$now".padLeft( 2, '0' )}.shtml"
我得到
diary47.shtml
返回

如所述,如果您想要ISO月数:

为年中的周计算的值 字段范围从1到53。第1周为一周 一年是最早的七天 从getFirstDayOfWeek()开始 至少包含 getMinimalDaysInFirstWeek()天,从 那一年。因此,这取决于 getMinimalDaysInFirstWeek()的值, getFirstDayOfWeek()和 一月一日的一周。周至 一年中的第1周和一年中的第1周 次年的数字是多少 按顺序从2到52或53(如图所示 需要)

例如,1998年1月1日是 星期四如果getFirstDayOfWeek()为 星期一和getMinimalDaysInFirstWeek() 是4(这些值反映了 ISO 8601和许多国家标准), 然后,1998年第1周从12月1日开始 1997年1月29日,并于1998年1月4日结束。 但是,如果getFirstDayOfWeek()是 星期日,然后1998年第1周从 1998年1月4日至1月31日 10, 1998; 一九九八年首三天 然后是1997年第53周的一部分


编辑

甚至是Groovier(来自John的评论)

Edit2


只是在Windows上使用VirtualBox运行了这个,得到了同样的结果

太棒了。。。下面是一个简单的日期格式。。仍然不确定为什么cal.get(Calendar.WEEK OF the_YEAR)在mac和PC上的计算方式不同,这似乎是问题所在….
def fm_date='24/11/2010'Calendar.getInstance()。使用{cal cal->//我们想要ISO WEEK数字cal.firstDayOfWeek=MONDAY cal.minimalDaysInFirstWeek=4 cal.setTime(date.parse('dd/MM/yyyy',fm_date)now=cal[WEEK_OF u YEAR]}“diary${“$now”.padLeft(2,'0')}.shtml”
该代码在Mac和Windows上的工作方式是否不同?我怀疑这两个平台上的firstDayOfWeek和minimadaySinfirstweek的初始值可能不同……我在Mac上得到了
diary47.shtml
(但无法测试Windows):-/别担心…将其添加到我答案的底部;-)包括将
setTime
调用替换为更为groovy的setter调用。手指交叉这段代码在Windows到Mac上给出了相同的结果(如我所说,它在Mac上给出了预期的结果)
def fm_date = '24/11/2010'

Calendar.getInstance().with { cal ->
  // We want ISO Week numbers
  cal.firstDayOfWeek = MONDAY
  cal.minimalDaysInFirstWeek = 4

  cal.time = Date.parse( 'dd/MM/yyyy', fm_date )
  now = cal[ WEEK_OF_YEAR ]
}

"diary${"$now".padLeft( 2, '0' )}.shtml"