[Zope-dev] PythonScript for iso_week

Chris McDonough chrism@digicool.com
Wed, 14 Mar 2001 19:50:16 -0500


Hee hee.  Don't get all the hardcore Python folks in a tizzy now.  ;-)

----- Original Message -----
From: "Andy McKay" <andym@ActiveState.com>
To: "Steve Alexander" <steve@cat-box.net>; <zope-dev@zope.org>
Sent: Wednesday, March 14, 2001 4:50 PM
Subject: Re: [Zope-dev] PythonScript for iso_week


> 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 )
> >
>
>
> _______________________________________________
> 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 )
>