[Zope-dev] PythonScript for iso_week
Andy McKay
andym@ActiveState.com
Wed, 14 Mar 2001 13:50:12 -0800
Cool. Its all available in Perl as well now.
--
Andy McKay.
----- Original Message -----
From: "Steve Alexander" <steve@cat-box.net>
To: <zope-dev@zope.org>
Sent: Wednesday, March 14, 2001 4:32 AM
Subject: [Zope-dev] PythonScript for iso_week
> Hi folks,
>
> At various times in the past, people on this list have asked about
> getting week numbers from DateTime instances.
>
> I recently had this requirement, so I wrote a PythonScript to produce an
> iso_week tuple (year, week_number, dow_monday_is_one__sunday_is_seven)
> from a DateTime instance.
>
> I've submitted the same to the collector as a feature-enhancement patch
> to DateTime.py.
>
> I've tested this by empirically comparing it with the output of
> mxDateTime's iso_week attribute for all days from 1920-01-01 to some
> date in the twenty-third century.
>
> Note also that this iso_week method does not create additional DateTime
> instances.
>
> See also http://www.cl.cam.ac.uk/~mgk25/iso-time.html
>
> --------
> PythonScript iso_week
>
> Parameters: date
>
> doy=date.dayOfYear()
> dow=(date.dow()-1)%7
> y=date.year()
> thurs_this_week=doy+(3-dow)
> is_leap=y%4==0 and (y%100!=0 or y%400==0)
>
> if thurs_this_week>(is_leap and 366 or 365):
> week=1
> if dow<8:
> y=y+1
> else:
> mon_this_week=doy-dow
> day_year_begins=(dow-doy+1)%7
> day_of_4_jan=(day_year_begins+3)%7
> monday_of_first_week=4-day_of_4_jan
> week=(mon_this_week-monday_of_first_week)/7+1
>
> if week==0:
> y=y-1
> is_last_leap=y%4==0 and (y%100!=0 or y%400==0)
> if day_year_begins==4 or (day_year_begins==5 and is_last_leap):
> week=53
> else:
> week=52
>
> return y,week,dow+1
> --------
>
>
> --
> Steve Alexander
> Software Engineer
> Cat-Box limited
> http://www.cat-box.net
>
>
> _______________________________________________
> Zope-Dev maillist - Zope-Dev@zope.org
> http://lists.zope.org/mailman/listinfo/zope-dev
> ** No cross posts or HTML encoding! **
> (Related lists -
> http://lists.zope.org/mailman/listinfo/zope-announce
> http://lists.zope.org/mailman/listinfo/zope )
>