Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > ISO with timezone

Reply
Thread Tools

ISO with timezone

 
 
nik
Guest
Posts: n/a
 
      01-29-2008
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()).is oformat()[:-3]

'2008-01-23T11:22:54.130'

But can't figure out how to fit them together.

Thank you,
Nik
 
Reply With Quote
 
 
 
 
Nicholas F. Fabry
Guest
Posts: n/a
 
      01-29-2008
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()).isofo rmat()[:-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


 
Reply With Quote
 
 
 
 
nik
Guest
Posts: n/a
 
      01-29-2008
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


On Jan 28, 9:10 pm, "Nicholas F. Fabry" <(E-Mail Removed)>
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()).isofo rmat()[:-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


>

 
Reply With Quote
 
nik
Guest
Posts: n/a
 
      01-29-2008
On Jan 29, 10:56 am, nik <(E-Mail Removed)> 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.localtime()
> >>> 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
>
> On Jan 28, 9:10 pm, "Nicholas F. Fabry" <(E-Mail Removed)>
> 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()).isofo rmat()[:-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


 
Reply With Quote
 
Gabriel Genellina
Guest
Posts: n/a
 
      01-29-2008
En Tue, 29 Jan 2008 16:56:18 -0200, nik <(E-Mail Removed)> escribi�:

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


Are you looking for datetime.now()?

--
Gabriel Genellina

 
Reply With Quote
 
Nicholas F. Fabry
Guest
Posts: n/a
 
      01-30-2008

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" <(E-Mail Removed)>
> 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()).isofo rmat()[:-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


 
Reply With Quote
 
Ben Finney
Guest
Posts: n/a
 
      01-30-2008
"Nicholas F. Fabry" <(E-Mail Removed)> writes:

> 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).


It's not "the constructor for class 'datetime'" that has that method;
rather, the class 'datetime' has that method.

(If anything is "the constructor for class 'datetime'", it's the
'__new__' method -- or, some might argue, the '__init__' method -- and
that doesn't fit what you say above.)

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


This is unfortunately true. Native datetime support is improving, but
slowly.

--
\ "[T]he speed of response of the internet will re-introduce us |
`\ to that from which our political systems have separated us for |
_o__) so long, the consequences of our own actions." -- Douglas Adams |
Ben Finney
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
TimeZone change - how to use TimeZone class axrock Java 8 03-25-2009 11:54 PM
TimeZone calculation on Windows Vista with DateTime::TimeZone Ami Perl Misc 5 09-24-2007 07:27 AM
Convert windows TimeZone to Java TimeZone asaf Java 3 09-11-2006 05:40 PM



Advertisments