Mac dayofweek问题

时间:2010-11-25 00:08:29

标签: macos date groovy

有谁知道为什么以下代码在Windows上正常工作而不在Mac上? 今天(24/11/2010)应该按照MacOS返回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'

1 个答案:

答案 0 :(得分:1)

我认为这是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

documentation for GregorianCalendar所述,如果您想要ISO月号:

  

为WEEK_OF_YEAR计算的值   字段范围从1到53.第1周为a   年是最早的七天   从getFirstDayOfWeek()开始   至少包含   getMinimalDaysInFirstWeek()天   那年。因此它取决于   getMinimalDaysInFirstWeek()的值,   getFirstDayOfWeek()和当天   1月1周。周之间   一年的第1周和第1周的第1周   下一年是有编号的   顺序从2到52或53(如   需要)。

     

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


修改

甚至Groovier(来自John的评论)

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"

<强> EDIT2

在Windows上使用VirtualBox运行此功能,得到了相同的结果