在短期内会计AM PM不工作

2024-09-30 16:26:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在关注另一个搜索线索,但它不起作用。每当我包含%p以获取AM/PM时,都会出现以下错误:

值错误:时间数据“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)

Tags: 数据目的formatdatetimedatestringmy格式
3条回答

是的,因为你需要添加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

您只需要在strptime函数中提供相同的时间格式。然后在strftime函数中使用AM/PM格式(“%I:%M%p”)。在

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

提供的格式字符串^{}必须与完全匹配。在

如果您不知道时间的格式,可以尝试多种格式:

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)

输出:

^{pr2}$

相关问题 更多 >