title: Python time library: how do I preserve dst with strptime and strftime
body: <p>I need to store a timestamp in a readable format, and then later on I need to convert it to epoch for comparison purposes.</p>
  
  <p>I tried doing this:</p>
  
  <pre><code>import time
  format = '%Y %m %d %H:%M:%S +0000'
  timestamp1 = time.strftime(format,time.gmtime())  # '2016 03 25 04:06:22 +0000'
  t1 = time.strptime(timestamp1, format) # time.struct_time(..., tm_isdst=-1)
  time.sleep(1)
  epoch_now = time.mktime(time.gmtime())
  epoch_t1 = time.mktime(t1)
  print "Delta: %s" % (epoch_now - epoch_t1)
  </code></pre>
  
  <p>Running this, instead of getting Delta of 1 sec, I get 3601 (1 hr 1 sec), CONSISTENTLY.</p>
  
  <p>Investigating further, it seems that when I just do time.gmtime(), the struct has tm_isdst=0, whereas the converted struct t1 from timestamp1 string has tm_isdst=-1.</p>
  
  <p>How can I ensure the isdst is preserved to 0. I think that's probably the issue here.</p>
  
  <p>Or is there a better way to record time in human readable format (UTC), and yet be able to convert back to epoch properly for time diff calculation?</p>
  
  <p>UPDATES:
  After doing more research last night, I switched to using datetime because it preserves more information in the datetime object, and this is confirmed by albertoql answer below.</p>
  
  <p>Here's what I have now:</p>
  
  <pre><code>from datetime import datetime
  format = '%Y-%m-%d %H:%M:%S.%f +0000' # +0000 is optional; only for user to see it's UTC
  d1 = datetime.utcnow()
  timestamp1 = d1.strftime(format)
  d1a = datetime.strptime(timestamp1, format)
  time.sleep(1)
  d2 = datetime.utcnow()
  print "Delta: %s" % (d2 - d1a).seconds
  </code></pre>
  
  <p>I chose not to add tz to keep it simple/shorter; I can still strptime that way.</p>