On Feb 17, 2010, at 4:17 PM, Sander Sweers wrote:

On 17 February 2010 22:37, David Perlman <dperl...@wisc.edu> wrote:
As far as I can tell, this should always work. So wouldn't it be nice if
there were a less convoluted way to get this??

There is pytz [1] which should provide a simpler way to manage
timezone info in python.

Well, this is actually more complicated, not simpler. The description says:

pytz brings the Olson tz database into Python. This library allows accurate and cross platform timezone calculations using Python 2.3 or higher. It also solves the issue of ambiguous times at the end of daylight savings, which you can read more about in the Python Library Reference (datetime.tzinfo).

I don't want to deal with any of that stuff, I just want to know the actual current offset between local time and UTC. I don't care what the offset is in Nepal; I don't care what the offset will be come summertime; I don't care about anything in the Olson tz database. I just want something to tell me the current offset, right here, right now, on my own computer.

Anyway, I already wrote a function to calculate it, so it's a done deal. At this point I'm just really surprised that I had to...

For completeness, here's what I came up with. The format function was necessary because Google calendar queries require the time zone to be represented in the string like:
2010-03-01T21:00:00.000-06:00
However the isoformat() methods in python instead give something like:
2010-03-01T21:00:00.000-0600
which gives a server error if you try to send it to Google. Unfortunately, and also bizarrely, even the strftime() doesn't provide any way to generate the format Google demands, so I had to also write a function to do the formatting.

  def tzDeltaForm(self, tzd=None):
"""return the tzdelta in the format Google wants it, such as -06:00"""
    if not tzd: tzd=self.tzDelta()
    if tzd < 0:
      sign = -1
      tzd = -tzd
    else:
      sign = 1
    h = sign * tzd // 3600
    m = (tzd % 3600) // 60
    form = '%+03d:%02d' % (h,m)
    return form


  def tzDelta(self):
"""by whatever means necessary, return the current offset of the local time from utc."""
    s=time.time()
    t,u=time.localtime(s),time.gmtime(s)
    osec=3600*(t[3]-u[3]) + 60*(t[4]-u[4]) + (t[5]-u[5])
    #return datetime.timedelta(seconds=osec)
    return osec

OK, I hope that is helpful to someone else someday, because it has been an astonishing amount of pain to accomplish something seemingly so simple... Thanks to everyone for the input, every bit of it helped guide me along. :)



--
-dave----------------------------------------------------------------
"Pseudo-colored pictures of a person's brain lighting up are
undoubtedly more persuasive than a pattern of squiggles produced by a
polygraph.  That could be a big problem if the goal is to get to the
truth."  -Dr. Steven Hyman, Harvard



_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to