日期时间转换,日期转换,工具是经常被用到的,可在


工具是经常被用到的,可在多种场景被简单使用的..

platform: Any

#!/usr/bin/python# encoding: utf-8## filename: datetimetools.py"""通过识别提供的参数的类型,实现的各种"日期时间"数据格式的转换工具    日期时间的数据格式包括:        timestamp (unix time, seconds from 1970-1-1 0:00:00),        time.struct_time (C 语言中的时间结构)        datetime.datetime        datetime.date"""import timeimport datetimeDATETIMEBASE = datetime.datetime(1970, 1, 1)DT_DAY = datetime.timedelta(days=1)DT_SECOND = datetime.timedelta(seconds=1)DT_HOUR = 3600 * DT_SECONDclass Convertor:    def __init__(self,            defaultfmt="%Y-%m-%d %H:%M:%S",             tmzone=time.timezone):        """set the default string datetime format            and system local time zone        """        self.fmt = defaultfmt        self.tmzone = tmzone        self.srcfmt = self.fmt    def setsrcfmt(self, fmt="%Y-%m-%d %H:%M:%S"):        """set convert string format to be converted"""        self.srcfmt = fmt    def timestamp(self, obj=None):        """return unix timestamp"""        if obj is None:            return time.time()        elif isinstance(obj, datetime.datetime):            return (obj - DATETIMEBASE).total_seconds() + self.tmzone        elif isinstance(obj, datetime.date):            dt = datetime.datetime(obj.year, obj.month, obj.day)            return (dt - DATETIMEBASE).total_seconds() + self.tmzone        elif isinstance(obj, time.struct_time):            return time.mktime(obj)        elif isinstance(obj, (int, float)):            return obj        elif isinstance(obj, str):            return time.mktime(time.strptime(obj, self.srcfmt))    def datetime(self, obj=None):        """return datetime instance"""        if obj is None:            return datetime.datetime.now()        elif isinstance(obj, datetime.datetime):            return obj        elif isinstance(obj, datetime.date):            return datetime.datetime(obj.year, obj.month, obj.day)        elif isinstance(obj, time.struct_time):            return datetime.datetime(year=obj.tm_year,                    month=obj.tm_mon,                    day=obj.tm_mday,                    hour=obj.tm_hour,                    minute=obj.tm_min,                    second=obj.tm_sec)        elif isinstance(obj, (int, float)):            tm = time.gmtime(obj-self.tmzone)            return datetime.datetime(year=tm.tm_year,                    month=tm.tm_mon,                    day=tm.tm_mday,                    hour=tm.tm_hour,                    minute=tm.tm_min,                    second=tm.tm_sec)        elif isinstance(obj, str):            tm = time.strptime(obj, self.srcfmt)            return datetime.datetime(year=tm.tm_year,                    month=tm.tm_mon,                    day=tm.tm_mday,                    hour=tm.tm_hour,                    minute=tm.tm_min,                    second=tm.tm_sec)    def date(self, obj=None):        """return datetime instance"""        if obj is None:            return datetime.date.today()        elif isinstance(obj, (datetime.date, datetime.datetime)):            return datetime.date(obj.year, obj.month, obj.day)        elif isinstance(obj, time.struct_time):            return datetime.date(year=obj.tm_year,                    month=obj.tm_mon,                    day=obj.tm_mday)        elif isinstance(obj, (int, float)):            tm = time.gmtime(obj-self.tmzone)            return datetime.date(year=tm.tm_year,                    month=tm.tm_mon,                    day=tm.tm_mday)        elif isinstance(obj, str):            tm = time.strptime(obj, self.srcfmt)            return datetime.date(year=tm.tm_year,                    month=tm.tm_mon,                    day=tm.tm_mday)    def struct_time(self, obj=None):        """return a local time.struct_time"""        if obj is None:            return time.gmtime(time.time()-self.tmzone)        elif isinstance(obj, datetime.datetime):            tm = (obj - DATETIMEBASE).total_seconds()            return time.gmtime(tm)        elif isinstance(obj, datetime.date):            tm = (datetime.datetime(obj.year, obj.month, obj.day)                     - DATETIMEBASE).total_seconds()            return time.gmtime(tm)        elif isinstance(obj, time.struct_time):            return obj        elif isinstance(obj, (int, float)):            return time.gmtime(obj-self.tmzone)        elif isinstance(obj, str):            return time.strptime(obj, self.srcfmt)    def str(self, obj=None):        """return formated string"""        if obj is None:            return datetime.datetime.now().strftime(self.fmt)        elif isinstance(obj, (datetime.date, datetime.datetime)):            return obj.strftime(self.fmt)        elif isinstance(obj, time.struct_time):            return time.strftime(self.fmt, obj)        elif isinstance(obj, (int, float)):            return time.strftime(self.fmt, time.localtime(obj))        elif isinstance(obj, str):            return time.strftime(self.fmt, time.strptime(obj, self.srcfmt))def tester():    dct = Convertor()    dt = dct.datetime()    tm = dct.timestamp()    st = dct.struct_time()    sr = dct.str()    _D = dct.date()    print '%r' % tm    print '%r' % dct.timestamp(dt)    print '%r' % dct.timestamp(tm)    print '%r' % dct.timestamp(st)    print '%r' % dct.timestamp(sr)    print '%r' % dct.timestamp(_D)    print '%r' % dt    print '%r' % dct.datetime(dt)    print '%r' % dct.datetime(tm)    print '%r' % dct.datetime(st)    print '%r' % dct.datetime(sr)    print '%r' % dct.datetime(_D)    print '%r' % st    print '%r' % dct.struct_time(dt)    print '%r' % dct.struct_time(tm)    print '%r' % dct.struct_time(st)    print '%r' % dct.struct_time(sr)    print '%r' % dct.struct_time(_D)    dct.setsrcfmt('%Y%m%d%H%M%S')    sr = '20130705123245'    print '%r' % sr    print '%r' % dct.str(dt)    print '%r' % dct.str(tm)    print '%r' % dct.str(st)    print '%r' % dct.str(sr)    print '%r' % dct.str(_D)    print '%r' % _D    print '%r' % dct.date(dt)    print '%r' % dct.date(tm)    print '%r' % dct.date(st)    print '%r' % dct.date(sr)if __name__ == "__main__":    tester()#该片段来自于http://byrx.net

评论关闭