2016-05-29 4 views
0

у меня есть две строки, подобные этим:Обработка часовых поясов в strptime в Python

"Sun 10 May 2015 13:54:36 -0700" 
"Sun 10 May 2015 13:54:36 +0000" 

(Последняя часть часовой пояс -0700 означает 7 часов меньше, чем GMT)
Мое намерение превратить его в UNIX чтобы найти их абсолютную разницу легко.

Мой вопрос: есть ли встроенный способ превращения этих форматированных текстов в временную метку Unix? Или Есть ли тот, который вычисляет разницу двух таких строк напрямую?

Edit: Этот вопрос отличается от This one, так что проблема не включает часовых поясов и не любой из ответов на этот вопрос упоминается ничего о часовом поясе.

+0

@schwobaseggl Я не смог найти свой ответ в qu вы упомянули, так как никто ничего не говорил о часовых поясах :-( – FazeL

+2

Как насчет http://stackoverflow.com/questions/1101508/how-to-parse-dates-with-0400-timezone-string-in-python ? – schwobaseggl

+0

@schwobaseggl dateutil кажется идеальным, но он не связан со стандартной библиотекой python, я правильно отредактирую вопрос. – FazeL

ответ

0

Это должно работать на Python 3 & выше, но не известно, работает на всех платформах на Python 2.

date_str = "Sun 10 May 2015 13:54:36 -0700" 
pattern = '%a %d %B %Y %H:%M:%S %z' 
dt = int(time.mktime(time.strptime(date_str ,pattern))) 
print(dt) 

Для, Python 2.7+, (без %z)

import datetime 
date_str = "Sun 10 May 2015 13:54:36 -0700" 

dt_str = date_str[:-5].strip() 
dt_zone = int(date_str[-5:])/100 
pattern = '%a %d %B %Y %H:%M:%S' 

dtobj = datetime.datetime.strptime(dt_str ,pattern) 
dt = dtobj + datetime.timedelta(hours=dt_zone) 
print(dt.strftime('%s')) 
+0

@Fazel это не сработало? – Vishwa

+0

Решение Python 2 не работает для часовых поясов с смещением в дробном часе. –

+0

Кроме того, у вас есть дополнительная полоса –

0

Этот код ответьте на ваш вопрос:

from datetime import timedelta, datetime, tzinfo 
date1="Sun 10 May 2015 13:54:36 -0700" 

date2=date1[4:-6] 

zone = int(date1[-5:])/100 

d=datetime.strptime(date2, "%d %B %Y %H:%M:%S") 

class TZ(tzinfo): 
    def utcoffset(self, dt): return timedelta(hours=zone) 

d=datetime(d.year, d.month, d.day,d.hour,d.minute,d.second, tzinfo=TZ()).isoformat(' ') 


print d 
+0

Даже если она действительно работает, очень сомнительная кодировка IMO, включая такие вещи, как отбрасывание минут исходного смещения и использование глобальной переменной в качестве значения по умолчанию в методе. – martineau

+0

Что кодирует IMO –

+1

По-моему. Другой ответ имеет схожие проблемы. – martineau

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