2011-12-17 8 views
22

Пожалуйста, помогите мне изменить объект datetime (например: 2011-12-17 11:31:00-05:00) (включая часовой пояс) на временную метку Unix (например, function time.time() в Python).Изменить дату и время на отметку времени Unix в Python

+0

Возможно дубликат http://stackoverflow.com/questions/2775864/python-datetime-to-unix-timestamp –

+0

связанных: [Преобразование datetime.date к UTC метки времени в Python] (HTTP: // stackoverflow.com/a/8778548/4279) – jfs

ответ

6

неполный ответ (не касается часовых поясов), но, надеюсь, полезно:

time.mktime(datetime_object.timetuple()) 

** EDITED основано на следующем комментарии **

В моей программе, пользователь введите DateTime, выберите часовой пояс. ... Я создал список часовых поясов (используйте pytz.all_timezones) и разрешаю пользователю выбирать один часовой пояс из этого списка.

Модуль Pytz обеспечивает необходимые преобразования. Например. если dt ваш datetime объект, и пользователь выбрал «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()) 

Аргумент is_dst=True является разрешение неоднозначных раз в течение интервалов в 1-час в конце сбережения дневного света (см здесь http://pytz.sourceforge.net/#problems-with-localtime).

+0

Мне действительно нужно иметь дело с часовыми поясами. –

+0

Имеет ли объект datetime ввода правильный tzinfo? Или, если нет, откуда вы знаете, какой часовой пояс вам интересен? –

+1

есть. В моей программе пользователь вводит дату и время, выбирает часовой пояс. Я использую язык python, я создал список часовых поясов (используйте pytz.all_timezones) и разрешаю пользователю выбирать один часовой пояс из этого списка. Моя проблема заключается в том, как преобразовать дату-время вместе с идентификатором часового пояса в timestamp unix. Все выше ответа не решают мою проблему. Пожалуйста, помогите мне. –

14

Другой способ:

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

Отметка является Отметка времени Unix, который показывает ту же самую дату с объекта DateTime д.

+4

примечание: он удаляет доли секунды. Чтобы сохранить микросекунды, используйте: ['(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

Локальное время может быть неоднозначным, например, во время переходы конца DST («отступать»). 'timetuple()' устанавливает 'tm_isdst' в' -1', что заставляет 'mktime()' угадывать, то есть вероятность 50% ошибочна. Используйте либо время utc, либо известные объекты datetime. – jfs

Смежные вопросы