2015-10-09 3 views
-1

У меня есть словарь, как это:Преобразование значений словаря в формат временной метки

>>print xdict 
{'time': [(2015, 6, 3, 10, 41, 3), (2015, 6, 3, 20, 32, 21), ..., ...]} 

ли это способ превратить эти значения временной метки формат? Я хотел быть таким:

print xdict 
{'time': [1433320863.0, 1433356341.0, ..., ...]} 
+0

Я пробовал несколько вещей с конвертированием с использованием даты и времени, но все еще не получаю то, что хочу на en d.;/ –

+3

Да, это вычисление можно выполнить. Покажите код, который вы попробовали, чтобы мы могли объяснить, почему он не работает и не исправил его. – dsh

+1

@Kyll: вопрос, очевидно, не слишком широк. Он имеет краткий ответ. – jfs

ответ

4

Ваше время кортежи не представляют время в формате UTC. Если это ваш часовой пояс, а правила смещения utc для соответствующих времен те же, что и сейчас, или если библиотека времени C имеет доступ к исторической базе данных часовых поясов на вашей платформе, вы можете передать временные кортежи в time.mktime(), чтобы получить " секунд с начала эпохи ":

#!/usr/bin/env python 
import time 

x = {'time': [(2015, 6, 3, 10, 41, 3), (2015, 6, 3, 20, 32, 21)]} 
x['time'] = [time.mktime(tt + (-1,)*3) for tt in x['time']] 

в противном случае, вы должны использовать pytz, чтобы получить доступ к базе данных TZ на всех платформах и вычислить правильные„секунд с начала эпохи“(POSIX метки времени), соответствующие времени ввода кортежей:

#!/usr/bin/env python 
from datetime import datetime 
import pytz # $ pip install pytz 
import tzlocal # $ pip install tzlocal 

local_timezone = tzlocal.get_localzone() # pytz tzinfo representing local time 
epoch = datetime(1970, 1, 1, tzinfo=pytz.utc) 
x = {'time': [(2015, 6, 3, 10, 41, 3), (2015, 6, 3, 20, 32, 21)]} 
x['time'] = [(local_timezone.localize(datetime(*tt), is_dst=None) - epoch).total_seconds() 
      for tt in x['time']] 
+4

Благодарим вас за ответ и внесение вклада в переполнение стека, однако, пожалуйста, загляните на второй вопрос, потому что он кажется вне темы в соответствии с [help/on-topic]. Отвечая на вопрос не по теме, похоже, что все в порядке, чтобы задать такие вопросы - это не так. Вопросы вне темы могут быть закрыты, а затем удалены, что аннулирует ваш вклад! –

+0

@ J.F. Sebastian Спасибо за ваш ответ, но не могли бы вы объяснить мне больше этой строки? time.mktime (tt + (-1,) * 3) ...? –

+4

@Kyll: Я не считаю этот вопрос не по теме. Я бы хотел, чтобы вы не размещали комментарии к шаблонам и не объясняли причины, характерные для этого вопроса. – jfs

-3

Инициализировать datetime.datetime с распакованным кортежем (оператор over *). Затем, используя карту и лямбда, вы можете легко получить свою цель.

import time 
import datetime 

def transform(xdict): 
    return {"time": map(lambda k: time.mktime(datetime.datetime(*k).timetuple()), xdict["time"])} 
+5

Пожалуйста, обратитесь к дополнительной информации. Кодовые ответы [обескуражены] (// meta.stackexchange.com/questions/196187), потому что они не содержат содержимого, доступного для поиска, и не объясняют, почему кто-то должен «попробовать это». Существует множество примеров таких плохих ответов; но вы не хотите быть одним из этих людей, не так ли? – Mogsdad

+0

Несанкционированный код. –

+0

Спасибо вам большое! ;) –

0

Прокрутите список и воспользуйтесь приведенным ниже кодом. Вам нужен time.mktime для того, чтобы изменить в секунды

import time 
import datetime 

a = (2015, 6, 3, 10, 41, 3) 

b = datetime.datetime.strptime(', '.join(str(x) for x in a),'%Y, %m, %d, %H, %M, %S') 

print(time.mktime(b.timetuple())) 

>>> 1433342463.0 
+1

Кортеж может быть распакован в инициализатор даты и времени. –

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