减少return 减少传参。

主要是在调用上比以前强大很多,以前很怕操作时间,在一堆函数中传来传去。这个调用爽。

class DatetimeConverter:
DATETIME_FORMATTER = "%Y-%m-%d %H:%M:%S"
DATETIME_FORMATTER2 = "%Y-%m-%d" @classmethod
def bulid_conveter_with_other_formatter(cls, datetime_str, datetime_formatter):
"""
:param datetime_str: 时间字符串
:param datetime_formatter: 能够格式化该字符串的模板
:return:
"""
datetime_obj = datetime.datetime.strptime(datetime_str, datetime_formatter)
return cls(datetime_obj) def __init__(self, datetimex: typing.Union[int, float, datetime.datetime, str] = time.time()):
"""
:param datetimex: 接受时间戳 datatime类型 和 时间字符串三种类型
"""
if isinstance(datetimex, str):
if not re.match('\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}', datetimex):
raise ValueError('时间字符串的格式不符合此传参的规定')
else:
self.datetime_obj = datetime.datetime.strptime(datetimex, self.DATETIME_FORMATTER)
elif isinstance(datetimex, (int, float)):
self.datetime_obj = datetime.datetime.utcfromtimestamp(datetimex)
elif isinstance(datetimex, datetime.datetime):
self.datetime_obj = datetimex
else:
raise ValueError('实例化时候的传参不符合规定') @property
def datetime_str(self):
return self.datetime_obj.strftime(self.DATETIME_FORMATTER) @property
def timestamp(self):
return self.datetime_obj.timestamp() @property
def date_str(self):
return self.datetime_obj.strftime(self.DATETIME_FORMATTER2) @property
def one_hour_ago_datetime_converter(self):
"""
酒店经常需要提前一小时免费取消,直接封装在这里
:return:
"""
one_hour_ago_datetime_obj = self.datetime_obj + datetime.timedelta(hours=-1)
return self.__class__(one_hour_ago_datetime_obj) def is_greater_than_now(self):
return self.timestamp > time.time() def __str__(self):
return self.datetime_str def __call__(self):
return self.datetime_obj if __name__ == '__main__':
"""
1557113661.0
'2019-05-06 12:34:21'
'2019/05/06 12:34:21'
DatetimeConverter(1557113661.0)()
"""
o3 = DatetimeConverter('2019-05-06 12:34:21')
print(o3)
print('- - - - - - - -')
o = DatetimeConverter.bulid_conveter_with_other_formatter('2019/05/06 12:34:21', '%Y/%m/%d %H:%M:%S')
print(o)
print(o.date_str)
print(o.timestamp)
print('***************')
o2 = o.one_hour_ago_datetime_converter
print(o2)
print(o2.date_str)
print(o2.timestamp)
print(o2.is_greater_than_now())
print(o2(), type(o2()))
print(DatetimeConverter())

oop的方式来操纵时间的更多相关文章

  1. 如何在 ASP.NET Core 测试中操纵时间?

    有时候,我们会遇到一些跟系统当前时间相关的需求,例如: 只有开学季才允许录入学生信息 只有到了晚上或者周六才允许备份博客 注册满 3 天的用户才允许进行一些操作 某用户在 24 小时内被禁止发言 很显 ...

  2. java向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明)

    转载地址:http://www.devba.com/index.php/archives/4581.html java向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明); ...

  3. (转)java向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明)

    java向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明);部分资料参考网络资源 1. java向MySQL插入当前时间的四种方式 第一种:将java.util.Date ...

  4. IE 火狐浏览器对时间格式的兼容性;使用原型对象的方式 prototype关键字;时间格式化

    在ie中 时间格式如果用横杠来显示  "2013-05-10 19:20:59" 是可以正确识别的(如果用斜杠,IE也可以正确识别), 但是如果是火狐,则只能识别斜杠模式 &quo ...

  5. 【干货】操纵时间 感受威胁 MAC time时间戳视角

    来源:Unit 4: Unix/Linux Forensics Analysis 4.1 Unix/Linux Forensics Analysis MAC Times Sleuthkit工具的MAC ...

  6. Spring创建对象的三种方式以及创建时间

    创建对象的三种方式: 1.采用默认的构造函数创建 2.采用静态工厂方法 1.写一个静态工厂方法类 public class HelloWorldFactory { public static Hell ...

  7. (分享)java向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明)

    原文地址 http://blog.csdn.net/yangkai_hudong/article/details/18705713

  8. System.currentTimeMillis()计算方式与时间的单位转换

    目录[-] 一.时间的单位转换 二.System.currentTimeMillis()计算方式 一.时间的单位转换 1秒=1000毫秒(ms) 1毫秒=1/1,000秒(s)1秒=1,000,000 ...

  9. Java基础进阶:时间类要点摘要,时间Date类实现格式化与解析源码实现详解,LocalDateTime时间类格式化与解析源码实现详解,Period,Duration获取时间间隔与源码实现,程序异常解析与处理方式

    要点摘要 课堂笔记 日期相关 JDK7 日期类-Date 概述 表示一个时间点对象,这个时间点是以1970年1月1日为参考点; 作用 可以通过该类的对象,表示一个时间,并面向对象操作时间; 构造方法 ...

随机推荐

  1. Java实现微信网页授权

    开发前的准备: 1.需要有一个公众号(我这里用的测试号),拿到AppID和AppSecret: 2.进入公众号开发者中心页配置授权回调域名.具体位置:接口权限-网页服务-网页账号-网页授权获取用户基本 ...

  2. linux 指令(经常更新)

    添加一个服务 # sudo update-rc.d 服务名 defaults 99 删除一个服务 # sudo update-rc.d 服务名 remove 临时重启一个服务 # /etc/init. ...

  3. shiro3

    1 shiro介绍 1.1 什么是shiro shiro是apache的一个开源框架,是一个权限管理的框架,实现 用户认证.用户授权. spring中有spring security (原名Acegi ...

  4. [原创]java WEB学习笔记06:ServletContext接口

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  5. Flask框架的学习与实战(二):实战小项目

    昨天写了一篇flask开发环境搭建,今天继续,进行一个实战小项目-blog系统. blog系统很简单,只有一个页面,然而麻雀虽小五脏俱全.这里目的不是为了做项目而做项目,这篇文章本意是通过这次练习传达 ...

  6. mysqldump导出格式

    #导出大表:mysqldump --add-drop-table --single-transaction --triggers -R -quick --disable-keys -utest -pt ...

  7. linux学习系列二

    vim是由vi发展而来,具有语法高亮显示,多视图编辑,代码折叠,支持插件等功能,vim成为了linux发行版本的标配. 1. vim工作模式 1. 普通模式:实现基本的光标移动和大量的快捷操作 2. ...

  8. php深入浅出session

    1. session概念 0 2. http协议与状态保持 0 3. 理解cookie 0 4. php中session的生成机制 2 5. php中session的过期回收机制 3 6. php中s ...

  9. linux 替换目录下文件所有关键字

    for i in *;do sed -ie 's/_test2/_test3/g' $i; sed -ie 's/_type2/_type3/g' $i; done 539down voteaccep ...

  10. python 链接sharepoint 2013 REST api

    import requests,simplejson from requests_ntlm import HttpNtlmAuth p1 = requests.get("http://you ...