我有一个像23 July 1914
这样的字符串,想要将其转换为23/07/1914
日期格式。
但是我的代码提供了error
。
from datetime import datetime
datetime_object = datetime.strptime('1 June 2005','%d %m %Y')
print datetime_object
答案 0 :(得分:7)
您的错误采用用于删除字符串的格式。您使用 <body>
<form id="form1" runat="server">
<div class="auto-style1">
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<table class="auto-style2">
<tr>
<td>
<asp:Label ID="Label1" runat="server" CssClass="auto-style4" Text="Patient Report"></asp:Label>
<asp:TextBox ID="TextBox1" runat="server" Width="137px"></asp:TextBox>
<asp:Button ID="BtnSearch" runat="server" Text="Search" />
</td>
</tr>
<tr>
<td class="auto-style3">
<rsweb:ReportViewer ID="ReportViewer1" runat="server" Font-Names="Verdana" Font-Size="8pt" Height="218px" WaitMessageFont-Names="Verdana" WaitMessageFont-Size="14pt" Width="1010px">
<LocalReport ReportPath="Report1.rdlc">
<DataSources>
<rsweb:ReportDataSource DataSourceId="ObjectDataSource1" Name="DataSet1" />
</DataSources>
</LocalReport>
</rsweb:ReportViewer>
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="GetData" TypeName="MedImage.DataSet1TableAdapters.DataTable1TableAdapter"></asp:ObjectDataSource>
</td>
</tr>
</table>
</div>
</form>
</body>
作为月份的格式说明符,但是这需要一个0填充整数表示一年中的月份(例如,%m
为您的示例)。您要使用的是06
,它希望一年中的一个月完全写出来(例如您的示例中为%B
)。
有关June
格式说明符的完整说明,请参阅the documentation,如果您有任何其他问题,请先查看。
答案 1 :(得分:2)
以下是您应该做的事情:
from datetime import datetime
datetime_object = datetime.strptime('1 June 2005','%d %B %Y')
s = datetime_object.strftime("%d/%m/%y")
print(s)
输出:
>>> 01/06/05
您看到strptime
需要两个参数。
strptime(string[, format])
根据您指定的格式,字符串将转换为datetime
对象。
有各种格式
%a - 缩写的工作日名称 %A - 完整的工作日名称 %b - 缩写的月份名称 %B - 完整月份名称 %c - 首选日期和时间表示 %C - 世纪数(年份除以100,范围00至99) %d - 月中的某天(01至31) %D - 与%m /%d /%y相同 %e - 每月的某一天(1到31) %g - 像%G,但没有世纪 %G - 与ISO周数对应的4位数年份(参见%V)。 %h - 与%b相同 %H - 小时,使用24小时制(00至23)
以上是一些例子。看看formats
好好看看这两个!
%b - 缩写的月份名称 %B - 完整月份名称
它应该与您提供的字符串类似。令人困惑的看看这些例子。
>>> datetime.strptime('1 jul 2009','%d %b %Y')
datetime.datetime(2009, 7, 1, 0, 0)
>>> datetime.strptime('1 Jul 2009','%d %b %Y')
datetime.datetime(2009, 7, 1, 0, 0)
>>> datetime.strptime('jul 21 1996','%b %d %Y')
datetime.datetime(1996, 7, 21, 0, 0)
正如您所看到的,基于格式将字符串转换为日期时间对象。现在来看看吧!
>>> datetime.strptime('1 July 2009','%d %b %Y')
Traceback (most recent call last):
File "<pyshell#12>", line 1, in <module>
datetime.strptime('1 July 2009','%d %b %Y')
File "/usr/lib/python3.5/_strptime.py", line 510, in _strptime_datetime
tt, fraction = _strptime(data_string, format)
File "/usr/lib/python3.5/_strptime.py", line 343, in _strptime
(data_string, format))
ValueError: time data '1 July 2009' does not match format '%d %b %Y'
为什么错误,因为jun
或Jun
(简短格式)代表%b
。当您提供June
时,它会感到困惑。现在该怎么办?改变了格式。
>>> datetime.strptime('1 July 2009','%d %B %Y')
datetime.datetime(2009, 7, 1, 0, 0)
现在简单地转换datetime对象非常简单。
>>> s = datetime.strptime('1 July 2009','%d %B %Y')
>>> s.strftime('%d/%m/%Y')
'01/07/2009
同样,%m
是以月(数字)显示它的格式,详细了解它们。
答案 2 :(得分:0)
placeholder表示“月份为区域设置的全名”。将是%B
而不是%m
:
>>> from datetime import datetime
>>> datetime_object = datetime.strptime('1 June 2005','%d %B %Y')
>>> print(datetime_object)
2005-06-01 00:00:00
>>> print(datetime_object.strftime("%d/%m/%Y"))
01/06/2005
答案 3 :(得分:0)
这应该有效:
from datetime import datetime
print(datetime.strptime('1 June 2005', '%d %B %Y').strftime('%d/%m/%Y'))
print(datetime.strptime('23 July 1914', '%d %B %Y').strftime('%d/%m/%Y'))
有关详细信息,请参阅strftime-strptime-behavior
答案 4 :(得分:0)
%d
表示“作为零填充十进制数字的月份中的日期。”
%m
表示“月份为零填充十进制数。”
无论是日期还是月份都提供了您所期望的内容。你需要什么%B
月份(仅当你的语言环境是en_US),%-d
一天。