"Yinghe Chen" <yingh...@jeppesen.com> wrote in message
news:f84kee$q32$1...@wake.carmen.se...
> 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
>
I usually find time and date answers somewhere in here:
http://pleac.sourceforge.net/pleac_python/datesandtimes.html
rd
>>> 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()
...
>>> nextmo(datetime.date(2007,7,15))
'AUG07'
>>> nextmo(datetime.date(2007,12,15))
'JAN08'
>>>
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.
--
Carsten Haese
http://informixdb.sourceforge.net
+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.
</:-)>