Python和日期格式

时间:2015-08-14 09:21:17

标签: python datetime

我有一个继承的wxPython应用程序。在我看来,它需要一定程度的整理,因为日期可以以略微不同的格式出现。下面显示了一段示例代码(我添加了' print'语句: -

formattedDate = str(Date.tm_year) + '-' + str(Date.tm_mon) + '-' + str(Date.tm_mday)
print 'formattedDate is >', formattedDate, '<' 
today  = time.strftime('%Y-%m-%d')
print 'Today is >', today, '<' 

,其输出为: -

formattedDate is > 2015-8-14 <
Today is > 2015-08-14 <

formattedDate基于用户输入,是患者的DateOfBirth(添加到数据库中)。令我困惑的是,为什么月份是一个案例中的一位数,另一个是两位数。我已经浏览了我的Python书籍并在网上搜索过但无法找到答案。

3 个答案:

答案 0 :(得分:0)

Date的类型为time.struct_time。这是因为Date.tm_mon返回月份的整数表示(类型为int),当您手动将其转换为str时,您将获得它具有的位数。

示例 -

>>> t = time.strptime('2015-8-10','%Y-%m-%d')
>>> t
time.struct_time(tm_year=2015, tm_mon=8, tm_mday=10, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=222, tm_isdst=-1)
>>> t.tm_mon
8
>>> type(t.tm_mon)
<class 'int'>
>>> str(t.tm_mon)
'8'

当您使用格式为strftime()的{​​{1}}时,python会将月份正确格式化为2位数,格式为documented -

  

%m - 月份为十进制数[01,12]。

示例 -

%m

我总是建议您使用>>> time.strftime('%m') '08' 将日期格式化为字符串,而不是手动创建它们。要使用strftime()格式化time.struct_time对象,请将strftime()对象作为第二个参数传递给time.struct_time,示例 -

strtime()

答案 1 :(得分:0)

一切正常,根据文件:

print time.strftime显示2位数

%m月份为十进制数[01,12]。

和Date.tm_mon - 看起来像是自定义类/字段,它显示一位数值。检查什么是Date.tm_mon以及它如何存储值,也许它会截断零

答案 2 :(得分:0)

Date.tm_mon可能是一个整数,str(8)会打印一个数字(没有前导零)。

另一方面,time.strftime('%Y-%m-%d')中的%m总是输出2个数字的月份(documentation)。