how to get next month string?
John Machin
sjmachin at lexicon.net
Tue Jul 24 19:25:54 EDT 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