注:该例题来自(Python 核心编程 第二版)第13章 练习题13-7,题目如下:
13-7.数据类。提供一个time模块的接口,允许用户按照自己给定时间的格式,比如:“MM/DD/YY”、“MM/DD/YYYY”、“DD/MM/YY”、“DD/MM/YYYY”、“Mon DD, YYY”,或是标准的Unix日期格式“Day Mon DD, HH:MM:SS YYYY”来查看日期。你的类应该维护一个日期值,并用给定的时间创建一个实例。如果没有给出时间值,程序执行时会默认采用当前的系统时间。还包括另外一些方法。
update() 按给定时间或是默认的当前系统时间修改数据值
display() 以代表时间格式的字符串做参数,并按照给定时间的格式显示:
'MDY' ﹦> MM/DD/YY
'MDYY' ﹦> MM/DD/YY
'DMY' ﹦> DD/MM/YY
'DMYY' ﹦> DD/MM/YYYY
'MODYY' ﹦> Mon DD, YYYY
如果没有提供任何时间格式,默认使用系统时间或ctime()的格式。
下面是我写的该例题代码,供以后参考:
#!/usr/bin/env pythonfrom time import strftime,ctime,localtime,mktimeclass TimeDp(object): def __init__(self, usertuple=localtime()): self.__tuple = usertuple def update(self, newtuple=localtime()): self.__tuple = newtuple def display(self, param=ctime()): if param == "MDY": print strftime("%02m/%02d/%02y", self.__tuple) elif param == "MDYY": print strftime("%02m/%02d/%Y", self.__tuple) elif param == "DMY": print strftime("%02d/%02m/%02y", self.__tuple) elif param == "DMYY": print strftime("%02d/%02m/%Y", self.__tuple) elif param == "MODYY": print strftime("%02m %02d, %Y", self.__tuple) else: print ctime(mktime(self.__tuple))def _test(): print '-'*30 a = TimeDp() a.display('MDY') a.display('MDYY') a.display('DMY') a.display('DMYY') a.display('MODYY') a.display() print '-'*30 b = TimeDp((2014, 8, 1, 9, 25, 36, 2, 120, 0)) b.display('MDY') b.display('MDYY') b.display('DMY') b.display('DMYY') b.display('MODYY') b.display() print '-'*30 b.update((2012, 3, 26, 1, 10, 22, 6, 220, 0)) b.display('MDY') b.display('MDYY') b.display('DMY') b.display('DMYY') b.display('MODYY') b.display() print '-'*30 if __name__ == "__main__": _test()
该程序可当成模块导入使用,也可直接运行,直接运行结果如下:
------------------------------
10/22/15
10/22/2015
22/10/15
22/10/2015
10 22, 2015
Thu Oct 22 16:05:18 2015
------------------------------
08/01/14
08/01/2014
01/08/14
01/08/2014
08 01, 2014
Fri Aug 1 09:25:36 2014
------------------------------
03/26/12
03/26/2012
26/03/12
26/03/2012
03 26, 2012
Mon Mar 26 01:10:22 2012
------------------------------