减少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. 【WEB】高并发Web服务的演变-节约系统内存和CPU

    目前主流浏览器通常可以存在2-6个并发. 连接和请求,占据了服务器的大量CPU和内存等资源.在资源数目超过100+的网站页面中,使用更多的下载连接,非常有必要. 缓解“高并发”的压力的手段. 一. W ...

  2. CI 框架下执行CLI(命令行)

    1.可以按照Ci官方文件的指导来进行操作 让我们先创建一个简单的控制器,打开你的文本编辑器,新建一个文件并命名为 Tools.php,然后输入如下的代码: <?php class Tools e ...

  3. 工作中你肯定会有关于 Yii2 的小贴士用法,在下面评论分享出来吧。

    场景: 数据库有user表有个avatar_path字段用来保存用户头像路径 需求: 头像url需要通过域名http://b.com/作为基本url 目标: 提高代码复用 此处http://b.com ...

  4. [转]详解Java解析XML的四种方法

    XML现在已经成为一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便.对于XML本身的语法知识与技术细节,需要阅读相关的技术文献,这里面包括的内容有DOM ...

  5. POJ 之 1002 :487-3279

    487-3279 Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 242418   Accepted: 42978 Descr ...

  6. springmvc的优化

    二.springmvc的工作机制 在容器初始化时会建立所有url和controller的对应关系,保存到Map<url,controller>中.tomcat启动时会通知spring初始化 ...

  7. SrpingCloud 之SrpingCloud config分布式配置中心搭建

    1.搭建git环境   目的:持久化存储配置文件信息 采用码云 创建后 继续创建文件夹  用来区分不同的项目 下面就是git上存放配置文件了.环境的区分 dev  sit pre prd   开发  ...

  8. javascript的40个网页常用小技巧

    下面是javascript的40个网页常用小技巧,对网站开发人员相信会有帮助.1. oncontextmenu="window.event.returnValue=false" 将 ...

  9. django 使用内建过滤器实现文章摘要效果

    django 使用内建过滤器实现文章摘要效果 前端html代码 <div class="list-group"> {% if articles %} {% for ar ...

  10. 异常之: The server time zone value '�й���׼ʱ��' is unrecognized or represents more than one time zone.

    在 MySQL 中执行命令试下: set global time_zone=’+8:00’  设置为东8区 就不报错了. show variables like '%time_zone%'; 解释:在 ...