On Jan 29, 2008, at 13:56, nik wrote: > Thanks, > that does help and now I have: > >>>> from datetime import datetime, tzinfo, timedelta >>>> import time >>>> class TZ(tzinfo): > ... def utcoffset(self,dt): return timedelta(seconds=time.timezone) > ... >>>> print datetime(2008,2,29,15,30,11,tzinfo=TZ()).isoformat() > 2008-02-29T15:30:11+8:00 > > > But what I want to know now it how to get the actual time into the > expression instead of typing the 2008,2,29,15.... > So something like: >>> print > datetime(time.gmtime(),tzinfo=TZ()).isoformat(), but that doesn't > work. > > I realize that I could do: >>>> t = time.gmtime() >>>> print >>>> datetime(t[0],t[1],t[2],t[3],t[4],t[5],tzinfo=TZ()).isoformat() > > but I imagine there might be a cleaner way of doing this. > > Thanks, > Nik >
No need for the ugliness! The constructor for class datetime has a method, .now() that returns the current date and time, as a naive datetime object (i.e. no tzinfo attached). Since you want an aware datetime object (one with a tzinfo object attached), you can do it simply by feeding .now the tzinfo object you want attached, as below: >>> print datetime.now(TZ()).isoformat('T') 2008-01-29T23:43:16.809049-05:00 See PSL, Sect. 5.1.4 Dates and Times are a bit ugly in Python. Don't be discouraged, but you do need to understand them quite well to get bug-free code that plays with them. Nick Fabry > > On Jan 28, 9:10 pm, "Nicholas F. Fabry" <[EMAIL PROTECTED]> > wrote: >> Hello, nik. >> >> On Jan 28, 2008, at 21:03, nik wrote: >> >> >> >>> Hi, >> >>> How does one express the time in ISO format with the timezone >>> designator? >> >>> what I want is YYYY-MM-DDThh:mm:ss.sTZD >> >>>> From the documentation I see: >>>>>> from datetime import tzinfo, timedelta, datetime >>>>>> class TZ(tzinfo): >>> ... def utcoffset(self, dt): return timedelta(minutes=-399) >>> ... >>>>>> datetime(2002, 12, 25, tzinfo=TZ()).isoformat(' ') >>> '2002-12-25 00:00:00-06:39' >> >>> and I've also figured out: >>>>>> datetime.datetime.fromtimestamp(time.time()).isoformat()[:-3] >>> '2008-01-23T11:22:54.130' >> >>> But can't figure out how to fit them together. >> >> There is nothing there to 'fit together' - in the first example >> given, >> the datetime object has no time component specified, so it fills in >> default vaules of zero. The following should make this clear: >> >>>>> your_time = datetime(2008, 2, 29, 15, 30, 11, tzinfo=TZ()) >>>>> print your_time >> 2008-02-29 15:30:11-05:00 >>>>> print your_time.isoformat('T') >> 2008-02-29T15:30:11-05:00 >> >> If you wish to append the NAME of the tzinfo object instead of its >> offset, that requires a bit more playing around (along with a >> properly >> defined tzinfo object - check out dateutil or pytz for a concrete >> implementation of tzinfo subclasses (i.e. timezones)), but the >> following would work: >> >>>>> print your_time.strftime('%Y-%m-%dT%H:%M:%S %Z') >> 2008-02-29T15:30:11 EST >> >> For details on how the .strftime method works, see Python Standard >> Library, Section 14.2. >> >> I hope this helps! >> >> Nick Fabry >> >>> Thank you, >>> Nik >>> -- >>> http://mail.python.org/mailman/listinfo/python-list > >> > -- > http://mail.python.org/mailman/listinfo/python-list -- http://mail.python.org/mailman/listinfo/python-list