获得年度最佳一周

Gu.*_*u. 7 delphi monthcalendar

Delphi Xe,Win 7,系统TimeZone UTC + 4:0,系统中一周的第一天 - 星期一,时间与time.windows.com同步

在标准组件Delphi Win32的调色板中有组件MonthCalendar,其属性为WeekNubers = true(显示周数),date = now,第一天 - 星期一.

显示19号(今天) - 第43周的数字.

我通过dateutils.WeekOfTheYear(now)=请求号码返回42.

在此输入图像描述

来源(0.5 Mb)http://www.sendspace.com/file/yuz6ko

通过组件MonthCalendar的初始代码判断 - 就像所有它都是真的(即使不暴露一周的第一天,它从系统参数中获取值).

并在询问WeekOfTheYear它被告知,所有被认为也适用标准ISO,但数字不重合:(

无论如何,我不明白,一周消失 - 如果要查看日历,应该是43,如果考虑,那个星期53和去年的第一个问题......

顺便说一下,2011年1月1日的WeekOfTheYear也会回来52但是应该返回1 ...

为什么区别和哪里是正确的?

RRU*_*RUZ 11

两种结果都是正确的,不同之处在于该DateUtils.WeekOfTheYear函数使用了一周的ISO 8601标准定义.That is, a week is considered to start on a Monday and end on a Sunday.

请查看有关ISO 8601格式的周数的说明.

如果1月1日是星期一,星期二,星期三或星期四,则是01周.如果1月1日是星期五,星期六或星期日,则是上一年的第52周或第53周(没有第00周) .12月28日总是在同一年的最后一周.

此功能的Embarcadero在线帮助DateUtils.WeekOfTheYear

....如果一年中的第一个日历日是星期五,星期六或星期日,那么对于日历年的前三天,两天或一天,WeekOfTheYear将返回上一年的最后一周.类似地,如果一年中的最后一个日历日是星期一,星期二或星期三,那么对于日历年的最后一天,两天或三天,WeekOfTheYear返回1(下一个日历年的第一周).

因此,01-01-2011本周六是本周被认为是上一年的第52周.

这也解释了为什么今天(19-10-2011)返回的周数是42而不是43.