2010-03-21 7 views
19

Potrzebuję wygenerować lokalny znacznik czasu w postaci RRRRMMDDHHmmSSOHH'mm '. Że OHH'mm jest jednym z +, -, Z, a następnie są godziny i minuty, po których następuje ".Python: data, formatowanie czasu

Jak mogę uzyskać taki znacznik czasu, oznaczający zarówno lokalną strefę czasową, jak i możliwą oszczędność czasu letniego?

+0

Gdzie szukać formatowania czasu? Co próbowałeś? Jakie błędy dostałeś? –

+0

Czytam std lib docs, a oni mylą to, co robią strefy czasowe ... – TarGz

+0

"mylące"? Mógł cokolwiek znaczyć. Aby pomóc innym osobom z tym samym problemem, możesz podać cytat lub link, który Cię pomylił? –

Odpowiedz

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

To właśnie mnie "20100321142049-01'00" ":) – badp

+0

Dokładnie to, co chciałem! – TarGz

+0

O nie! Jest błąd. Powiedzmy, że ktoś mieszka we Włoszech, strefa czasowa to + 01'00 ', a nie -01'00' ... – TarGz

8

time.strftime zrobi za to,

A w Linuksie, %z będzie po prostu dać -HHMM Format jeśli zmienna jest ustawiona prawidłowo.

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

Jak? Nie ma sposobu, aby uzyskać przesunięcie strefy czasowej, a% Z dostaje tylko nazwę strefy czasowej ..? – TarGz

+0

@TarGz - time.timezone ma przesunięcie strefy czasowej w sekundach, możesz połączyć dwa, aby zadziałało – YOU

+0

Wygląda na to, że% z jest zależny od wersji – TarGz