Tags: converting, converts, datetime, digging, fabulous, last_modified_date, local, naive, object, programming, python, solutionimport, time, utc

converting datetime object in UTC to local time

On Programmer » Python

2,947 words with 1 Comments; publish: Fri, 04 Jan 2008 17:32:00 GMT; (200138.67, « »)

Hi all,

So a lot of digging on doing this and still not a fabulous solution:

import time

# this takes the last_modified_date naive datetime, converts it to a

# UTC timetuple, converts that to a timestamp (seconds since the

# epoch), subtracts the timezone offset (in seconds), and then

converts

# that back into a timetuple... Must be an easier way...

mytime = time.localtime(time.mktime(last_modified_date.utct imetuple())

- time.timezone)

lm_date_str = time.strftime("%m/%d/%Y %I:%M %p %Z", mytime)

last_modified_date is a naive datetime.datetime object

A previous version gave me something like:

mytime =

datetime.datetime.fromtimestamp(time.mktime(last_m odified_date.utctimetuple())

- time.timezone)

lm_date_str = mytime.strftime("%m/%d/%Y %I:%M %p %Z")

But this gave me no timezone since the datetime object is still

naive. And I'm going from a datetime to a timetuple to a timestamp

back to a datetime...

All this seems like a lot of monkeying around to do something that

should be simple -- is there a simple way to do this without requiring

some other module?

thx

Matt

All Comments

Leave a comment...

  • 1 Comments
    • How about subclass datetime.tzinfo? That way you can use asttimezone

      to transfer utc to localtime. It requires an aware object though not

      naive. A bit more coding, but a lot less converting...

      Jim

      On Jul 3, 5:16 pm, Matt <m....python.questionfor.info.vazor.comwrote:

      Quote:
      === Original Words ===

      Hi all,

      >

      So a lot of digging on doing this and still not a fabulous solution:

      >

      import time

      >

      # this takes the last_modified_date naivedatetime, converts it to a

      # UTC timetuple, converts that to a timestamp (seconds since the

      # epoch), subtracts the timezone offset (in seconds), and then

      converts

      # that back into a timetuple... Must be an easier way...

      mytime = time.localtime(time.mktime(last_modified_date.utct imetuple())

      - time.timezone)

      >

      lm_date_str = time.strftime("%m/%d/%Y %I:%M %p %Z", mytime)

      >

      last_modified_date is a naivedatetime.datetimeobject

      >

      A previous version gave me something like:

      >

      mytime =datetime.datetime.fromtimestamp(time.mktime(last_ modified_date.utctimetuple())

      - time.timezone)

      >

      lm_date_str = mytime.strftime("%m/%d/%Y %I:%M %p %Z")

      >

      But this gave me no timezone since thedatetimeobject is still

      naive. And I'm going from adatetimeto a timetuple to a timestamp

      back to adatetime...

      >

      All this seems like a lot of monkeying around to do something that

      should be simple -- is there a simple way to do this without requiring

      some other module?

      >

      thx

      >

      Matt

      #1; Fri, 04 Jan 2008 17:33:00 GMT