在.Net Framework中,尝试使用ISO-8601计算周数时存在已知错误。
简短描述:"根据ISO 8601标准确定日期的周数时,对Oleaut32.dll文件的底层函数调用错误地返回了特定年份最后一个星期一的第53周,而不是第1周。"(来源:Microsoft)
我的问题:这个bug是否也"包含"在MonoTouch中,我必须使用变通方法,还是在MonoTouch中修复了?MonoTouch-API-参考在这里并不是什么大帮助。。。
更新:正如评论中告诉我的那样,我自己做了一些测试。之后的示例代码
DateTime first = new DateTime(1851,12,29);
DateTime second = new DateTime(2011,12,30);
DateTime third = new DateTime(1895,12,30);
System.Globalization.Calendar objCal = System.Globalization.CultureInfo.CurrentCulture.Calendar;
int weekNumberFirst = objCal.GetWeekOfYear (first, System.Globalization.CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);
int weekNumberSecond = objCal.GetWeekOfYear (second, System.Globalization.CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);
int weekNumberThird = objCal.GetWeekOfYear (third, System.Globalization.CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);
Console.WriteLine (weekNumberFirst +" "+weekNumberSecond+" "+weekNumberThird);
假定输出:1 52 1
实际输出:53 52 53
但如果能有一些"官方声明",那还是很好的。。。
我可以确认最新的MonoTouch版本中存在错误。
除非微软修复他们自己的实现(我还没有在Windows上测试过),否则它不太可能被修复,因为Mono的兼容性包括许多错误(便于移植)。然而,调整您的代码以处理工作/有缺陷的代码库并不困难(因此任何未来的更改都不会影响您)。
注:这只是一个半官方声明。任何公司的官方声明仅来自官方渠道;-)