how to get next month string?

John Machin sjmachin at lexicon.net
Wed Jul 25 01:25:54 CEST 2007


On Jul 24, 11:16 pm, Carsten Haese <cars... at uniqsys.com> wrote:
> On Tue, 2007-07-24 at 05:15 -0700, John Machin wrote:
> > On Jul 24, 8:31 pm, "Yinghe Chen" <yinghe.c... at jeppesen.com> wrote:
> > > Hi,
> > > Could someone help on how to use python to output the next month string like
> > > this?
>
> > > "AUG07", suppose now is July 2007.
>
> > > I think also need to consider Dec 07 case, it is supposed to output as
> > > below:
> > > "JAN07".
>
> > > datetime module seems not supporting the arithmatic operations, any hints?
>
> > > Thanks in advance,
>
> > > Yinghe Chen
>
> > >>> import datetime
> > >>> def nextmo(d):
> > ...   mo = d.month
> > ...   yr = d.year
> > ...   mo += 1
> > ...   if mo > 12:
> > ...     mo = 1
> > ...     yr += 1
> > ...   return datetime.date(yr, mo, 1).strftime('%b%y').upper()
>
> A more concise variant:>>> import datetime
> >>> def nextmo(d):
>
> ...   mo = d.month
> ...   yr = d.year
> ...   nm = datetime.date(yr,mo,1)+datetime.timedelta(days=31)
> ...   return nm.strftime('%b%y').upper()
>
> Going 31 days from the first of any month will always get us into the
> next month. The resulting day of the month will vary, but we're throwing
> that away with strftime.

+1 for the "+ 31 days" trick

Sorry about the assembly language :-)

Here's an alternative for folks who prefer legibility:

>>> def nextmo(d):
...    yr, mo = divmod(d.year * 12 + d.month, 12)
...    return datetime.date(yr, mo + 1, 1).strftime('%b%y').upper()

<:-)>
And for the other folks, one of these days I'll get around to writing
a PEP for the /% operator.
</:-)>





More information about the Python-list mailing list