Учет AM PM в strptime не работает - PullRequest
       1

Учет AM PM в strptime не работает

0 голосов
/ 27 сентября 2018

Я слежу за другой веткой поиска здесь, но она не работает.Каждый раз, когда я включаю% p для получения AM / PM, я получаю следующую ошибку:

ValueError: данные времени '11: 30 'не соответствуют формату'% I:% M% p '

Это верно, если у меня есть «% I:% M% p» или «% I:% M% p».Если я оставлю% p выключенным, он будет работать нормально, но это побьет цель получить AM PM

# my code
from datetime import datetime
date_string = '11:30'
format = '%I:%M %p'
my_date = datetime.strptime(date_string, format)
my_date.strftime(format)

Ответы [ 3 ]

0 голосов
/ 27 сентября 2018

Предоставленные строки формата strptime (...) должны соответствовать точно .

Если вы не знаете, в каком формате находится ваше время, вы можете попробовать несколько:

from datetime import datetime

def getTime(text, formats = ['%I:%M %p','%I:%M']):
    """Tries different patterns to create a time from text. 
    First format with match wins.

    As default the time is parsed with am/pm, as fallback without it."""

    for pattern in formats:
        try:    
            return datetime.strptime(text, pattern)
        except:
            pass # catch all errors

    # nothing matched, return None
    raise ValueError("No format {} matched '{}'".format(formats,text))

a_time = getTime("11:42")    # produces an am time
b_time = getTime("11:42 pm") # produces a pm time

print(a_time.strftime("%I:%M %p"))    
print(b_time.strftime("%I:%M %p"))

try:
    c_time = getTime("does not work")
except ValueError as e:
    print(type(e),e)

Вывод:

11:42 AM
11:42 PM
<class 'ValueError'> No format ['%I:%M %p', '%I:%M'] matched 'does not work'
0 голосов
/ 27 сентября 2018

Вам просто нужно предоставить тот же формат вашего времени в функции strptime.А затем используйте формат AM / PM ('% I:% M% p') в функции strftime.

from datetime import datetime

def getTime(time_string):
    time_object = datetime.strptime(time_string,'%H:%M') #Covert string to time object
    return time_object.strftime('%I:%M %p') #Convert time object to AM/PM format

getTime('11:30')
Output: 11:30 am
getTime('13:30')
Output: 01:30 pm
0 голосов
/ 27 сентября 2018

Да, потому что вам нужно добавить, если это AM или PM, чтобы соответствовать формату.

from datetime import datetime
date_string = '11:30 AM'
format = '%I:%M %p'
my_date = datetime.strptime(date_string, format)
my_date.strftime(format)

% I соответствует часу,% M соответствует минутам,% p соответствует AM / PM

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...