Переход от даты твиттера к дате даты и времени Python - программирование

Переход от даты твиттера к дате даты и времени Python

Я получаю сообщения Twitter, которые отправляются в определенную дату в следующем формате из twitter:

Tue Mar 29 08:11:25 +0000 2011

Я хочу сохранить эти даты в поле "метка времени с часовым поясом" в postgresql с полем DateTimeField djangos. Когда я храню эту строку, я получаю эту ошибку:

ValidationError: [u'Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format.']

Могу ли я автоматически преобразовать тип данных twitter в время datetime python (которое работает в другом месте моего приложения для сохранения дат).

4b9b3361

Ответ 1

Написание чего-то подобного должно преобразовать дату твиттера в метку времени.

import time

ts = time.strftime('%Y-%m-%d %H:%M:%S', time.strptime(tweet['created_at'],'%a %b %d %H:%M:%S +0000 %Y'))

Ответ 2

Отдайте это. Предполагается, что формат даты из твиттера соответствует требованиям RFC822 (см. Вопрос, связанный с @Adrien).

Создается объект наивного datetime (т.е. информация о часовом поясе). Он настраивается в соответствии с смещением часового пояса к UTC. Если вам не нужно сохранять исходный часовой пояс, я бы сохранил дату в формате UTC и формат по местному времени при ее отображении.

from datetime import datetime, timedelta
from email.utils import parsedate_tz

s = 'Tue Mar 29 08:11:25 +0000 2011'

def to_datetime(datestring):
    time_tuple = parsedate_tz(datestring.strip())
    dt = datetime(*time_tuple[:6])
    return dt - timedelta(seconds=time_tuple[-1])

Ответ 3

вы можете конвертировать дату с помощью datetime.strptime() или time.strptime(). однако эти две функции не могут проанализировать смещение часового пояса (см. эта ошибка).

Таким образом, единственное решение, которое я вижу, - это разделить дату самостоятельно, удалить смещение часового пояса, подать остальные на strptime() и обработать смещение вручную...

посмотрите этот вопрос, где вы найдете несколько советов о том, как самостоятельно проанализировать смещение.

Ответ 4

Следующий код напечатает красивую дату (по местному времени) из даты Twitter (UTC).

from datetime import datetime
from datetime import timezone    

datetime.strptime(mydata["created_at"], '%a %b %d %H:%M:%S %z %Y').replace(
            tzinfo=timezone.utc).astimezone(tz=None).strftime('%Y-%m-%d %H:%M:%S'))

Ответ 5

Чтобы получить datetime с часовым поясом, вы можете просто использовать datetime.strptime следующим образом:

from datetime import datetime
s = 'Wed Jun 05 05:34:02 +0000 2019'
created_at = datetime.strptime(s, '%a %b %d %H:%M:%S %z %Y')
print(created_at)
#2019-06-05 05:34:02+00:00

Ответ 6

Используя стратегию, аналогичную предложенной SoFolichon, в Python 3.x вы также можете использовать pytz например:

from datetime import datetime, timezone
import pytz

datetime.strptime(tweets["created_at"], '%a %b %d %H:%M:%S %z %Y').replace(
tzinfo=timezone.utc).astimezone(pytz.timezone('US/Eastern')).strftime(
'%Y-%m-%d %H:%M:%S')

Ответ 7

Как насчет этого? Это не требует форматирования строк.

import datetime
from email.utils import mktime_tz, parsedate_tz

def parse_datetime(value):
    time_tuple = parsedate_tz(value)
    timestamp = mktime_tz(time_tuple)

    return datetime.datetime.fromtimestamp(timestamp)

print(parse_datetime('Tue Mar 29 08:11:25 +0000 2011'))
#2011-03-29 10:11:25

Моя система в GMT +2, следовательно, разница включена.

Ответ 8

Немного стар, но использование синтаксического анализа действительно помогает мне в этом вопросе.

from datetime import datetime
from dateutil.parser import parse

date = 'Fri May 10 00:44:04 +0000 2019' 
dt = parse(date)

print(dt) 
# 2019-05-10 00:44:04+00:00

Ответ 9

Первоначальная проблема, с которой я столкнулся, заключалась в преобразовании даты и времени, которые API-интерфейс Twitter дает String.

Следующие работы, в которых рассматриваются различные комментарии, которые, как кажется, есть у людей, относятся к вышеупомянутым решениям, в которых немного неясно, является ли дата начала уже в строковом формате или нет. Это работает для Python 2.7

При помощи твита от API tweet.created_at предоставляет дату в формате datetime. Вверху вашего файла добавьте from datetime import datetime

затем используйте следующее, чтобы получить соответствующую строку.

datetime.strftime(tweet.created_at,'%a %b %d %H:%M:%S %z %Y').

Затем вы можете использовать эту строку, как описано в других комментариях, чтобы манипулировать ею.