У меня есть огромный список дат, таких как строки:
Jun 1 2005 1:33PM
Aug 28 1999 12:00AM
Я собираюсь перенести их обратно в надлежащие поля даты и времени в базе данных, поэтому мне нужно преобразовать их в реальные объекты даты и времени.
Это происходит через ORM Django, поэтому я не могу использовать SQL для преобразования при вставке.
strptime()
сводит вас с ума, если вы не оберните его. Смотрите мой ответ, основанный на ответе Or Weis на этоОтветы:
datetime.strptime
является основной процедурой для разбора строк в datetime. Он может обрабатывать все виды форматов, причем формат определяется строкой формата, которую вы ему задаете:Полученный
datetime
объект является часовым поясом.Ссылки:
Документация Python для
strptime
: Python 2 , Python 3Документация Python для строк
strptime
/strftime
format: Python 2 , Python 3strftime.org также очень хороший справочник для strftime
Ноты:
strptime
= "время разбора строки"strftime
= "время форматирования строки"источник
date
вместо adatetime
, прохождениеdatetime
обрабатывает это красиво:datetime.strptime('Jun 1 2005', '%b %d %Y').date() == date(2005, 6, 1)
datetime
объект с информацией о часовом поясе , добавив эту строку в Python 3:from datetime import timezone; datetime_object = datetime_object.replace(tzinfo=timezone.utc)
"%Y-%m-%d %H:%M:%S"
from datetime import datetime
вместо простоimport datetime
.Используйте стороннюю библиотеку dateutil :
Он может обрабатывать большинство форматов дат, включая тот, который вам нужен для анализа. Это более удобно, чем
strptime
в большинстве случаев.Это очень полезно для написания тестов, где удобочитаемость важнее производительности.
Вы можете установить его с помощью:
источник
Проверьте strptime в модуле времени . Это обратная STRFTIME .
источник
Я собрал проект, который может конвертировать некоторые действительно аккуратные выражения. Проверьте временную строку .
Вот несколько примеров ниже:
pip install timestring
источник
import timestring
timestring.Date('27 Mar 2014 12:32:29 GMT').year
эта библиотека сделала это так легко! Спасибо.2017-02-01
. То же самое для 5 февраля 2017 года (однако, 5 февраля 2017 года это правильно); ни один из тех последних двух форматов, которые я когда-либо видел, не использовался для моих знаний, но я все равно решил указать на это.Date("20180912")
каким-то образом анализирует значение2018-11-21
. Используйте на свой риск.Помните об этом, и вам не нужно было снова путаться в преобразовании даты и времени.
String to datetime object =
strptime
объект datetime в другие форматы =
strftime
Jun 1 2005 1:33PM
равно
%b %d %Y %I:%M%p
так что вам нужно strptime, т.е. преобразование
string
вВывод
Что если у вас другой формат дат, вы можете использовать panda или dateutil.parse
Вывод
источник
%b
сломается, если вы проанализируете английское свидание на машине, у которой нет английского языка?В Python> = 3.7.0,
для преобразования YYYY-MM-DD строки в объект даты и времени ,
datetime.fromisoformat
может быть использован.источник
Многие временные метки имеют подразумеваемый часовой пояс. Чтобы ваш код работал в каждом часовом поясе, вы должны использовать UTC для внутреннего использования и прикреплять часовой пояс каждый раз, когда посторонний объект входит в систему.
Python 3.2+:
источник
mktime()
при переходах DST) 1-го метода, если знаете 2-й метод (datetime.strptime()
)? Если вы хотите избежать исключения в течение високосной секунды (2-й метод не работает), вы можете использоватьcalendar.timegm
вместо этого:(datetime(1970,1,1)+timedelta(seconds=timegm(time.strptime(..)))).replace(tzinfo=timezone(timedelta(-3)))
Вот два решения, использующие Pandas для преобразования дат, отформатированных в виде строк, в объекты datetime.date.
Задержки
А вот как конвертировать оригинальные примеры даты и времени ОП:
Существует множество вариантов преобразования строк в метки времени Pandas
to_datetime
, поэтому проверьте документы, если вам нужно что-то особенное.Аналогично, у временных меток есть много свойств и методов, которые могут быть доступны в дополнение к
.date
источник
Мне лично нравится решение с использованием
parser
модуля, который является вторым ответом на этот вопрос и красив, поскольку вам не нужно создавать строковые литералы для его работы. НО , одним недостатком является то, что он на 90% медленнее, чем принятый ответstrptime
.Пока вы не делаете это миллион раз снова и снова, я все же думаю, что этот
parser
метод более удобен и будет обрабатывать большинство форматов времени автоматически.источник
То, что здесь не упоминается и является полезным: добавление суффикса к дню. Я отделил суффиксную логику, чтобы вы могли использовать ее для любого числа, которое вам нравится, а не только для дат.
источник
источник
Пример объекта даты / времени с поддержкой Django Timezone.
Это преобразование очень важно для Django и Python, когда у вас есть
USE_TZ = True
:источник
Создайте небольшую служебную функцию, например:
Это достаточно универсально:
источник
format
является зарезервированным словом в python и не должен использоваться в качестве имени переменной.Было бы полезно для преобразования строки в дату и время, а также с часовым поясом
источник
Стрелка предлагает множество полезных функций для даты и времени. Этот фрагмент кода дает ответ на вопрос и показывает, что стрелка также способна легко форматировать даты и отображать информацию для других локалей.
Смотрите http://arrow.readthedocs.io/en/latest/ для получения дополнительной информации.
источник
Вы можете использовать easy_date, чтобы сделать это легко:
источник
Если вам нужен только формат даты, вы можете вручную конвертировать его, передавая отдельные поля, например:
Вы можете передать значения разделенной строки, чтобы преобразовать их в тип даты, например:
Вы получите итоговое значение в формате даты.
источник
Вы также можете проверить
dateparser
Установка:
Я думаю, это самый простой способ разбора дат.
Образец кода:
Вывод:
источник
Смотри мой ответ .
В реальных данных это реальная проблема: множественные, несовпадающие, неполные, несовместимые и многоязычные / региональные форматы даты, часто свободно смешанные в одном наборе данных. Это не нормально для производственного кода, чтобы провалиться, не говоря уже о том, чтобы быть счастливым как лиса.
Нам нужно попытаться ... поймать несколько форматов даты и времени fmt1, fmt2, ..., fmtn и подавить / обработать исключения (из
strptime()
) для всех тех, которые не соответствуют друг другу (и, в частности, избегать необходимости в юкки-н-глубокой лестнице попытки с отступом) ... поймать пункты). Из моего решенияисточник
он показывает столбец «Дата начала» и «Время последнего входа в систему» оба являются «объект = строки» в кадре данных
Используя упомянутую
parse_dates
опцию,read_csv
вы можете конвертировать вашу строку datetime в формат pandas datetime.источник