2011-12-17 16 views
22

Proszę, pomóż mi zmienić obiekt datetime (na przykład: 2011-12-17 11:31:00-05:00) (w tym strefę czasową) na uniksowy znacznik czasu (jak funkcja time.time() w Pythonie).Zmień datetime na uniksowy znacznik czasu w Pythonie

+0

Ewentualnie duplikatem http://stackoverflow.com/questions/2775864/python-datetime-to-unix-timestamp –

+0

related: [Konwersja datetime.date UTC datownik w Pythonie] (http: // stackoverflow.com/a/8778548/4279) – jfs

Odpowiedz

6

Niepełna odpowiedź (nie dotyczy stref czasowych), ale mam nadzieję, że przydatne:

time.mktime(datetime_object.timetuple()) 

** edytowane w oparciu o następujący komentarz **

W moim programie, użytkownik wchodzi datetime, wybierz strefę czasową. ... Stworzyłem listę stref czasowych (użyj pytz.all_timezones) i pozwól użytkownikowi wybrać jedną strefę czasową z tej listy.

Moduł Pytz zapewnia niezbędne konwersje. Na przykład. jeśli dt to obiekt datetime, a użytkownik wybrał „Us/Eastern”

import pytz, calendar 
tz = pytz.timezone('US/Eastern') 
utc_dt = tz.localize(dt, is_dst=True).astimezone(pytz.utc) 
print calendar.timegm(utc_dt.timetuple()) 

Argument is_dst=True jest rozwiązanie niejednoznaczne razy w odstępach 1-godzinnych na koniec czasu letniego (patrz tutaj http://pytz.sourceforge.net/#problems-with-localtime).

+0

Naprawdę muszę poradzić sobie z strefami czasowymi. –

+0

Czy wejściowy obiekt datetime zawiera właściwe tzinfo? Lub, jeśli nie, skąd wiesz, która strefa czasowa Cię interesuje? –

+1

tak. W moim programie użytkownik wprowadza datetime, wybierz strefę czasową. Używam języka python, stworzyłem listę stref czasowych (użyj pytz.all_timezones) i pozwól użytkownikowi wybrać jedną strefę czasową z tej listy. Mój problem polega na konwersji datetime wraz z timezone id na uniksowy znacznik czasu. Wszystkie powyższe odpowiedzi nie rozwiązują mojego problemu. Proszę pomóż mi. –

14

Innym sposobem jest:

import calendar 
from datetime import datetime 
d = datetime.utcnow() 
timestamp=calendar.timegm(d.utctimetuple()) 

Znacznik czasu jest znacznik czasu UNIX, który pokazuje tę samą datę z obiektem DateTime d.

+4

uwaga: usuwa ułamki sekund. Aby zachować mikrosekundy, użyj: ['(d - datetime (1970,1,1)) .total_seconds()'] (http://stackoverflow.com/a/8778548/4279) – jfs

12
import time 

import datetime 

dtime = datetime.datetime.now() 

ans_time = time.mktime(dtime.timetuple()) 
+2

Czas lokalny może być niejednoznaczny np. Podczas przejścia końca DST ("powrót"). 'timetuple()' ustawia 'tm_isdst' na' -1', które zmusza 'mktime()' do odgadnięcia, tj. istnieje 50% szansy, że zrobi to źle. Użyj czasu utc lub świadomych obiektów datetime. – jfs

Powiązane problemy