how to get next month string?
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