从具有自定义周开始的日期计算周#的算法?(对于iCal)



我只能找到获得ISO 8601周的算法(周从周一开始)。

然而,iCal规范中说

一周被定义为七天,从周定义为周开始(参见WKST)。第1周日历年是指至少包含四(4)天的第一周在那个日历年。

因此,它比ISO 8601更复杂,因为一周的开始可以是一周中的任何一天。

有没有一种算法可以通过自定义的一周的开始日来确定日期的周数?

或者。。。iCal4j中有这样的函数吗?从约会中确定周号?

谢谢!

p.s.限制:我使用的JVM语言不能扩展Java类,但我可以调用Java方法或实例化Java类。

if (input_date < firstDateOfTheYear(WKST, year))
{
    return ((isLeapYear(year-1))?53:52);
}
else
{
    return ((dayOfYear(input_date) - firstDateOfTheYear(WKST, year).day)/7 + 1);
}

firstDateOfTheYear返回给定周(WKST)和年份的第一个日历日期,例如,如果WKST=星期四,年份=2012,则返回1月5日。

dayOfYear返回一年中的顺序数字日期,例如2月1日=32

示例#1:2012年1月18日,本周开始时间为星期一

  • dayOfYear(2012年1月18日)=18
  • firstDateOfTheYear(2012年,星期一)=2012年1月2日

(18-2)/7+1=3回答第3周

示例#2:2012年1月18日,本周开始时间为周四

  • dayOfYear(2012年1月18日)=18
  • firstDateOfTheYear(2012年,星期四)=2012年1月5日

(18-5)/7+1=2回答第2周

示例#3:2012年1月1日,本周开始时间为星期一

  • firstDateOfTheYear(2012年,星期一)=2012年1月2日
  • IsLeapYear(2012-1)=false

2012年1月1日<2012年1月2日回答第52周

  1. daysInFirstWeek为一年中第一周的1月天数。本周从WKST开始。(例如,如果1月1日是WKST日,则返回7)

  2. dayOfYear设置为输入日期年份的第n天(例如2月1日=32日)

  3. 如果dayOfYear小于或等于daysInFirstWeek

    3.1.如果daysInFirstWeek大于或等于4,weekNo为1,则跳至步骤5。

    3.2.设daysInFirstWeekOfLastYear为上一年第一周的1月天数。本周从WKST开始。

    3.3.如果daysInFirstWeekOfLastYear是4,或者去年是闰年,daysInFirstWeekOfLastYear是5,则weekNo是53,否则weekNo是52,则跳到步骤5。

  4. weekNo设置为ceiling((dayOfYear - daysInFirstWeek) / 7)

    4.1.如果daysInFirstWeek大于或等于4,则将weekNo增加1

    4.2.如果daysInFirstWeek等于53,并且inputDate的年份+1的第一周(从WKST开始)的天数大于或等于4,则将weekNo设置为1

  5. 返回weekNo

相关内容

  • 没有找到相关文章

最新更新