减少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. android 中使用svg

    http://www.see-source.com/blog/300000038/1189.html http://www.jianshu.com/p/30dfa5920658#

  2. (转)Web Service和WCF的到底有什么区别

    [1]Web Service:严格来说是行业标准,也就是Web Service 规范,也称作WS-*规范,既不是框架,也不是技术. 它有一套完成的规范体系标准,而且在持续不断的更新完善中. 它使用XM ...

  3. Python socket TCPServer Demo

    #coding:utf-8 from SocketServer import TCPServer,BaseRequestHandler import traceback class MyBaseReq ...

  4. 【FLASK模板】set,with语句

    # set with 语句 ###set语句:在模板中, 可以使用 ‘set’语句来定义变量, 实例如下: <body> {% set username='zhiliaoketang' % ...

  5. python内置方法补充bin

    bin(x) 英文说明:Convert an integer number to a binary string. The result is a valid Python expression. I ...

  6. UESTC 1061 秋实大哥与战争 线段树区间合并

    秋实大哥与战争 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) 男儿何不带吴钩, ...

  7. FineReport报表使用

    FineReport报表是帆软公司推出的可以嵌入java的免费报表. FineReport有2部分组成,一有c/s端的报表工具制作cpt结尾的报表文件:二是 java调用报表的web程序. 这里主要说 ...

  8. cookie对比localStorage哪个适合作为网站皮肤存储

    cookie对比localStorage哪个适合作为网站皮肤存储 cookie cookie : 一般由服务器生成,可设置失效时间.如果在浏览器生成,默认是关闭浏览器之后失效 存储大小:4k 每次都会 ...

  9. snowflake(canvas)

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" charset=&q ...

  10. SQLite connection strings

    Basic Data Source=c:\mydb.db;Version=3; Version 2 is not supported by this class library. SQLite In- ...