在strptime中解决AM PM问题

时间:2018-09-27 11:48:17

标签: python datetime

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

ValueError:时间数据'11:30'与格式'%I:%M%p'不匹配

如果我有'%I:%M%p'或'%I:%M%p',则为true。如果我不使用%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 :(得分:2)

您只需要在<?xml version="1.0" encoding="utf-8"?> <packages> <package id="Antlr" version="3.5.0.2" targetFramework="net461" /> <package id="Microsoft.ApplicationInsights" version="2.5.1" targetFramework="net461" /> <package id="Microsoft.ApplicationInsights.Agent.Intercept" version="2.4.0" targetFramework="net461" /> <package id="Microsoft.ApplicationInsights.DependencyCollector" version="2.5.1" targetFramework="net461" /> <package id="Microsoft.ApplicationInsights.PerfCounterCollector" version="2.5.1" targetFramework="net461" /> <package id="Microsoft.ApplicationInsights.Web" version="2.5.1" targetFramework="net461" /> <package id="Microsoft.ApplicationInsights.WindowsServer" version="2.5.1" targetFramework="net461" /> <package id="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel" version="2.5.1" targetFramework="net461" /> <package id="Microsoft.AspNet.Mvc" version="5.2.4" targetFramework="net461" /> <package id="Microsoft.AspNet.Razor" version="3.2.4" targetFramework="net461" /> <package id="Microsoft.AspNet.TelemetryCorrelation" version="1.0.0" targetFramework="net461" /> <package id="Microsoft.AspNet.Web.Optimization" version="1.1.3" targetFramework="net461" /> <package id="Microsoft.AspNet.WebApi" version="5.2.4" targetFramework="net461" /> <package id="Microsoft.AspNet.WebApi.Client" version="5.2.4" targetFramework="net461" /> <package id="Microsoft.AspNet.WebApi.Core" version="5.2.4" targetFramework="net461" /> <package id="Microsoft.AspNet.WebApi.HelpPage" version="5.2.4" targetFramework="net461" /> <package id="Microsoft.AspNet.WebApi.WebHost" version="5.2.4" targetFramework="net461" /> <package id="Microsoft.AspNet.WebPages" version="3.2.4" targetFramework="net461" /> <package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="2.0.0" targetFramework="net461" /> <package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net461" /> <package id="Newtonsoft.Json" version="11.0.1" targetFramework="net461" /> <package id="System.Diagnostics.DiagnosticSource" version="4.4.1" targetFramework="net461" /> <package id="WebGrease" version="1.6.0" targetFramework="net461" /> </packages> 函数中提供与您的时间相同的格式。然后在Add-Migration函数中使用AM / PM格式('%I:%M%p')。

strptime

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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'