如何在python中将字符串转换为日期格式?

时间:2017-08-29 10:18:37

标签: python datetime

我有一个像23 July 1914这样的字符串,想要将其转换为23/07/1914日期格式。 但是我的代码提供了error

from datetime import datetime
datetime_object = datetime.strptime('1 June 2005','%d %m %Y')
print datetime_object

5 个答案:

答案 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'

为什么错误,因为junJun(简短格式)代表%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一天。