Macos Mac dayofweek问题
有人知道为什么下面的代码在Windows而不是Mac上正常工作吗?? 根据MacOS,今天(2010年11月24日)应返回47而不是48Macos 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
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"