2010-03-21 15 views
19

Ho bisogno di generare un timestamp locale in una forma di YYYYMMDDHHmmSSOHH'mm '. Quello OHH'mm 'è uno di +, -, Z e poi ci sono ore e minuti seguiti da'.Python: data, ora formattazione

Per favore, come faccio ad ottenere un timestamp del genere, indicando sia il fuso orario locale che la possibile ora legale?

+0

Dove si guarda per la formattazione di tempo? Cosa hai provato? Che errori hai ottenuto? –

+0

Ho letto i documenti di std lib e stanno confondendo il fuso orario ... – TarGz

+0

"confuso"? Potrebbe significare qualsiasi cosa. Per aiutare gli altri con lo stesso problema, potresti fornire la citazione o il link che ti ha confuso? –

risposta

28
import time 

localtime = time.localtime() 
timeString = time.strftime("%Y%m%d%H%M%S", localtime) 

# is DST in effect? 
timezone = -(time.altzone if localtime.tm_isdst else time.timezone) 
timeString += "Z" if timezone == 0 else "+" if timezone > 0 else "-" 
timeString += time.strftime("%H'%M'", time.gmtime(abs(timezone))) 
+0

Questo mi ha solo "20100321142049-01'00 '" :) – badp

+0

Esattamente quello che volevo! – TarGz

+0

Oh, no! C'è un bug Dì, qualcuno vive in Italia, il fuso orario è quindi + 01'00 ', non -01'00' ... – TarGz

8

time.strftime farà per questo,

E in linux, %z sarà solo dare -HHMM formato se variabile d'ambiente è impostato correttamente.

>>> os.environ['TZ'] = 'EST' 
>>> time.strftime('%x %X %z') 
'03/21/10 08:16:33 -0500' 
+0

Come? Non c'è modo di ottenere l'offset del fuso orario e% Z ottiene solo il nome del fuso orario ..? – TarGz

+0

@TarGz - time.timezone ha l'offset della zona locale in secondi, potresti voler combinarne due per farlo funzionare – YOU

+0

Sembra,% z è dipendente dal plot – TarGz