减少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. bash: /home/aprilpeng/.bashrc: Permission denied

    bash: /home/aprilpeng/.bashrc: Permission denied 出现这样的权限问题,一般是在切换用户的时候,用户没有该目录的权限 可以$chown -R git:us ...

  2. bug_1——oracle listagg():列转行

    select    listagg(字段名 ,',') within group (order by 字段名) from表 where 条件 listagg():列转行 WM_CONCAT():和并列 ...

  3. Oracle视图传递参数

    在Oracle里,视图不像存储过程和函数一样,可以定义输入参数,但我们可以变个方式,使用程序包来实现. oracle package: oracle package是oracle包,是一组相关过程.函 ...

  4. surf算法解析

    surf构造的金字塔图像与sift有很大的不同,sift采用的是DOG图像,surf采用的是hessian矩阵行列式近似值图像,hessian矩阵是surf算法的核心,构建hessian矩阵的目的是为 ...

  5. linux 9 -- 交互式使用Bash Shell

    二十二. 交互式使用Bash Shell:     1.  用set命令设置bash的选项:     下面为set主要选项的列表及其表述: 选项名 开关缩写 描述 allexport -a 打开此开关 ...

  6. CVPR 2018paper: DeepDefense: Training Deep Neural Networks with Improved Robustness第一讲

    前言:好久不见了,最近一直瞎忙活,博客好久都没有更新了,表示道歉.希望大家在新的一年中工作顺利,学业进步,共勉! 今天我们介绍深度神经网络的缺点:无论模型有多深,无论是卷积还是RNN,都有的问题:以图 ...

  7. mysql 数据库备份方案及策略

    由于mysql存在多种数据库备份方式,而且各有利弊,对于我们初学者来说,选择合适的备份方式确实有些困难.个人觉得,首先要基于公司的需求,考虑能够容忍丢失多少数据.花多少人力时间成本等,这是我们制定备份 ...

  8. 《机器学习实战》学习笔记第十一章 —— Apriori算法

    主要内容: 一.关联分析 二.Apriori原理 三.使用Apriori算法生成频繁项集 四.从频繁项集中生成关联规则 一.关联分析 1.关联分析是一种在大规模数据集中寻找有趣关系的任务.这些关系可以 ...

  9. Spring Cloud之Feign客户端超时时间配置

    关于雪崩效应: 默认情况下tomcat只有一个线程去处理客户端发送的所有请求.高并发情况下,如果客户端请求都在同一接口,tomcat的所有线程池去处理,导致其他接口服务访问不了,等待. Tomcat有 ...

  10. 矩阵内积和Schur补

    > Many problems in the field of signal processing have been expended into matrix problems.So it's ...