Re: how to get next month string?

111 views
Skip to first unread message

Yinghe Chen

unread,
Jul 24, 2007, 6:32:44 AM7/24/07
to
My bad, for Dec 07, it shall output as JAN08.

"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
>


Yinghe Chen

unread,
Jul 24, 2007, 6:31:42 AM7/24/07
to

BartlebyScrivener

unread,
Jul 24, 2007, 7:56:56 AM7/24/07
to
On Jul 24, 5:31 am, "Yinghe Chen" <yinghe.c...@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 usually find time and date answers somewhere in here:

http://pleac.sourceforge.net/pleac_python/datesandtimes.html

rd

John Machin

unread,
Jul 24, 2007, 8:15:42 AM7/24/07
to

>>> 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'
>>>

Carsten Haese

unread,
Jul 24, 2007, 9:16:13 AM7/24/07
to pytho...@python.org
On Tue, 2007-07-24 at 05:15 -0700, John Machin wrote:
> On Jul 24, 8:31 pm, "Yinghe Chen" <yinghe.c...@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.

--
Carsten Haese
http://informixdb.sourceforge.net


John Machin

unread,
Jul 24, 2007, 7:25:54 PM7/24/07
to

+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.
</:-)>


Silfheed

unread,
Jul 25, 2007, 4:23:25 AM7/25/07
to
Sounds like a job for dateutil (http://labix.org/python-dateutil).
It's not a built in module (it's in the cheeseshop at least), but it
looks like it pretty much does exactly what you want. If you really
dont want to download anything, I suppose you could create something
from datetime's timedeltas which do support arithmetic operations.

Yinghe Chen

unread,
Jul 25, 2007, 6:16:29 AM7/25/07
to
John's method works perfectly, thanks all for your kind help.
"John Machin" <sjma...@lexicon.net> wrote in message
news:1185279342.8...@d30g2000prg.googlegroups.com...

hold...@gmail.com

unread,
May 2, 2013, 12:16:16 AM5/2/13
to
Hello. Is that you? Wondered what you had been up to lately and discovered that your email address hadn't transferred across to my new computer, so I had to resort to Google and found you on camp.lang.python - I hope!

regards
Steve
Reply all
Reply to author
Forward
0 new messages