Конвертировать 12-часовую строку даты / времени в 24-часовую дату и время - PullRequest
1 голос
/ 11 августа 2010

Как и другие вопросы, задаваемые здесь, я собираюсь сделать простое преобразование форматов времени. Я нашел ответы о том, как сделать это в Perl, но не в Python.

У меня есть такая строка:

on Jun 03, 02010 at 10:22PM

и я хотел бы преобразовать его в объект datetime, например:

Thu, 03 Jun 2010 22:22:00 -0000

Я разделил свой ввод так:

date = str(comment.div.contents[5].contents)
month = date[6:9]
day   = date[10:12]
year  = date[15:19]
time  = date[23:30]

, который устанавливает меня с некоторыми хорошими переменными, которые я могу вернуть в datetime, но прежде чем я это сделаю, я должен преобразовать время Должен ли я разделить time в приведенном выше примере и вычислить hh и {AM|PM} отдельно?

Ответы [ 3 ]

4 голосов
/ 11 августа 2010

Использование dateutil :

import datetime as dt
import dateutil.parser as dparser

date_str='on Jun 03, 02010 at 10:22PM'
date=dparser.parse(date_str)
print(date)
# 2010-06-03 22:22:00
print(date.strftime('%a, %d %b %Y %H:%M:%S'))
# Thu, 03 Jun 2010 22:22:00

Если вы можете как-то убрать надоедливое «on» и изменить 02010 на 2010, в date_str тогда вы можете использовать dt.datetime.strptime:

date_str='Jun 03, 2010 at 22:22PM'
date=dt.datetime.strptime(date_str,'%b %d, %Y at %H:%M%p')
print(date)
# 2010-06-03 22:22:00

Или, как Мухаммад Алькарури указывает , если date_str s всегда начинается с on и использует четырехзначный год с префиксом ноль, тогда вы можете использовать

date_str='on Jun 03, 02010 at 22:22PM'
date=dt.datetime.strptime(date_str,'on %b %d, 0%Y at %H:%M%p')
print(date)
# 2010-06-03 22:22:00

Python strftime и strptime используют одноименные функции C вашей машины.Так что проверьте местную справочную страницу о том, какие коды формата доступны для вашей машины.Общий список кодов формата (которые могут быть доступны) см. http://au2.php.net/strftime.

2 голосов
/ 11 августа 2010

Вероятно, вам лучше использовать стандартную библиотеку, а именно: time.strptime .

В частности, указанное вами время можно преобразовать в time.struct_time, например

In [9]: time.strptime("on Jun 03, 02010 at 10:22PM", "on %b %d, 0%Y at %I:%M%p") 

Out[9]: time.struct_time(tm_year=2010, tm_mon=6, tm_mday=3, tm_hour=22, tm_min=22, tm_sec=0, tm_wday=3, tm_yday=154, tm_isdst=-1) #store in variable t

Теперь, когда у нас есть struct_time в t, мы можем сделать

In [14]: time.strftime('%a, %d %b %H:%M:%S %z', t)

Out[14]: 'Thu, 03 Jun 22:22:00 '

Обратите внимание, что информация о зоне, требуемая вами в "Thu, 03 Jun 22:22:00 -0000" (бит -0000), не являетсяпредоставляется первым форматом, поэтому он не будет отображаться в результате.

1 голос
/ 11 августа 2010

Я довольно ленив, поэтому я, вероятно, буду использовать strptime и strftime:

date = strptime(dateString, 'on %b %d, %Y at %I:%M%p')
date.strftime('%a, %d %b %H:%M:%S %z')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...