2015-06-26 2 views
5

У меня есть поле, которое входит в строку и представляет время. Иногда это через 12 часов, иногда в 24 часа. Возможные значения:Python: Как преобразовать строку в datetime без знания формата?

  1. 8:26
  2. 08:26 утра
  3. 13:27

Есть функция, которая будет преобразовывать их в формат времени, будучи умным о нем? Вариант 1 не имеет am, потому что его в 24-часовом формате, в то время как опция 2 имеет 0 перед ним, а опция 3, очевидно, находится в 24-часовом формате. Есть функция в Python/с Lib, что делает:

time = func(str_time) 
+0

, связанные с: [Преобразование строки в DateTime] (http://stackoverflow.com/q/466345/4279) – jfs

+0

+1 за особое внимание на «формат не известно» (т.е. путаница между, например, dd/mm и mm/dd, не вызывает беспокойства). Если бы это было известно, 'dateutil' был бы ненадежным выбором. –

ответ

12

супер короткий ответ:

from dateutil import parser 
parser.parse("8:36pm") 
>>>datetime.datetime(2015, 6, 26, 20, 36) 
parser.parse("18:36") 
>>>datetime.datetime(2015, 6, 26, 18, 36) 

Dateutil должны быть доступны для вашего установка python; нет необходимости в чем-то большим, как панды

Если вы хотите, чтобы извлечь время от datetime объекта:

t = parser.parse("18:36").time() 

, который даст вам time объект (если это более существенную помощь к вам). Или вы можете извлекать отдельные поля:

dt = parser.parse("18:36") 
hours = dt.hour 
minute = dt.minute 
+0

Могу ли я это сделать без даты? Проблема в том, что я запускаюсь в Google App Engine, и использование библиотек за пределами Python STL является проблемой. –

+0

@DebnathSinha: Python STL? что это? Кроме того, если вы знаете, что есть только три типа вещей и не хотите использовать внешнюю библиотеку (хотя ваш вопрос ** специально спросил об этом), напишите парсер самостоятельно. Это действительно не сложно с помощью 'string.split (": ")' и подобных. –

+0

Ur right, мой плохой, я упомянул, что библиотека в порядке. STL - не правильный термин для Python, заимствованный из моих дней C++, я имел в виду стандартную библиотеку. Проблема в том, что App Engine не позволяет нам устанавливать какую-либо библиотеку, а использовать только стандартную библиотеку. Является ли dateutil всем кодом Python (нет C)? Если это так, я мог бы включить его из источника в дерево исходного кода, а не устанавливать его. Думайте, что это может сработать. Благодаря! –

2

есть одна такая функция в панд

import pandas as pd 
d = pd.to_datetime('<date_string>') 
Смежные вопросы