注:该例题来自(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 python

from time import strftime,ctime,localtime,mktime

class 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

------------------------------