Python日期时间函数。所有日期、时间的api都在datetime模块内。但是我们有时想用Python学习一下面向对象于是:

设计一个日期类,能够实现与日期有关的有关操作,如计算两个日期之间的间隔,指定日期之后若干天所对应的日期,比较两个日期的大小等。可自行拓展其他功能。
更多内容访问omegaxyz.com

拓展功能:
①判断该日期是一年中的第几天。
②按照YMD(year-month-day)、MDY、DMY和default格式打印日期。
③利用吉姆拉尔森公式计算指定日期所对应是星期几。
④计算两个日期的间隔。
⑤给出指定日期后多少天是那一天。
⑥初始化类的时候检查是否合法。

说明文档(设计思路):
①类设计私有变量normal_year和leap_year,在初始化类的时候将检查日期是否合法。如果不合法将返回错误。
②比较两个日期大小时即compare函数,我摒弃了传统的日期比较方法,直接将日期转化为int类型,比较两个数字大小。
③计算日期间隔(cal_interval)和增加天数(add_days)函数采用传统的日期操作方法。
④在计算日期是星期几的时候采用了基姆拉尔森算法。
⑤在检查类是否正确时对闰年和非法变量等情况均综合考虑。
⑥按照YMD(year-month-day)、MDY、DMY和default格式打印日期。

代码:

class Date:def __init__(self, year, month, day):self.__normal_year = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]self.__leap_year = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]self.not_leap = 1if self.check(year, month, day):self.__year = yearself.__month = monthself.__day = dayelse:print('日期输入错误!!!')def check(self, year, month, day):if year < 0:return Falseif month > 12:return Falseif year % 4 == 0 and year % 100 != 0 or year % 400 == 0:self.not_leap = 0if day > self.__leap_year[month - 1]:return Falseelse:if day > self.__normal_year[month - 1]:return Falsereturn Truedef get_year(self):return self.__yeardef set_year(self, year):self.__year = yeardef get_month(self):return self.__monthdef set_month(self, month):self.__month = monthdef get_day(self):return self.__daydef set_day(self, day):self.__day = daydef compare(self, temp):cur_date = int(str(self.__year) + str(self.__month) + str(self.__day))temp_date = int(str(temp.get_year()) + str(temp.get_month()) + str(temp.get_day()))if cur_date > temp_date:return 1elif cur_date == temp_date:return 0else:return -1def cal_interval(self, date):interval = 0myself = selfif self.compare(date) == 0:passif self.compare(date) < 0:date, myself = myself, datewhile myself.compare(date) != 0:date.add_days(1)interval += 1return interval + 1def add_days(self, plus_day):while plus_day != 0:if self.not_leap == 0:temp = self.__leap_yearelse:temp = self.__normal_yearif temp[self.get_month()-1] >= self.get_day() + plus_day:self.__day = self.get_day() + plus_dayplus_day = 0else:total = 0for i in range(self.__month, 12):total += temp[i]plus_day -= temp[self.__month-1] - self.__dayif total >= plus_day:temp_month = self.__month+1while plus_day != 0:if plus_day <= temp[temp_month-1]:self.__day = plus_dayplus_day = 0else:plus_day -= temp[temp_month-1]temp_month += 1self.__month += 1else:plus_day -= total + 1self.__year += 1self.__month = 1self.__day = 1def printf(self, form):if form == 'MDY':print('日期: %d-%d-%d ' % (self.__month, self.__day, self.__year))elif form == 'YMD':print('日期: %d-%d-%d ' % (self.__year, self.__month, self.__day))elif form == 'DMY':print('日期: %d-%d-%d ' % (self.__day, self.__month, self.__year))else:print('日期: %d-%d-%d ' % (self.__year, self.__month, self.__day))def get_day_in_the_year(self):sum_ = 0if self.not_leap:temp = self.__normal_yearelse:temp = self.__leap_yearfor i in range(self.__month - 1):sum_ += temp[i]return sum_ + self.__daydef get_week(self):week = ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"]# 基姆拉尔森计算公式if self.__month == 1 or self.__month == 2:temp = int((self.__day + 2 * (self.__month + 12) + 3 * ((self.__month + 12) + 1) / 5 + (self.__year - 1) +(self.__year - 1) / 4 - (self.__year - 1) / 100 + (self.__year - 1) / 400) % 7)print(week[temp])else:temp = int((self.__day + 2 * self.__month + 3 * (self.__month + 1) / 5 + self.__year + self.__year / 4 -self.__year / 100 + self.__year / 400) % 7)print(week[temp])day1 = Date(1998, 5, 5)
day1.printf("default")
day1.get_week()
day2 = Date(2017, 12, 16)
day2.printf("default")
day2.get_week()
print(day1.cal_interval(Date(2017, 12, 16)))
day3 = Date(2017, 2, 29)
print(Date(2017, 12, 31).get_day_in_the_year())
print(Date(2008, 3, 1).get_day_in_the_year())


更多内容访问omegaxyz.com

网站文章采用知识共享许可协议BY-NC-SA4.0授权
© 2018 • OmegaXYZ-版权所有 转载请注明出处

Python日期类的实现相关推荐

  1. python日期_Python日期

    python日期 Python date class is part of datetime module. Python日期类是datetime模块的一部分. Python日期 (Python da ...

  2. [转载] 整理总结 python 中时间日期类数据处理与类型转换(含 pandas)

    参考链接: Python中的时间函数 2(日期操作) 我自学 python 编程并付诸实战,迄今三个月. pandas可能是我最高频使用的库,基于它的易学.实用,我也非常建议朋友们去尝试它.--尤其当 ...

  3. python设计一个date类数据成员有年月日_设计一个日期类Date,包括年、月、日等私有成员。要求实现日期的基本运算,例如某日期加上天数或减去天数...

    /*设计一个日期类Date,包括年.月.日等私有成员.要求实现日期的基本运算,例如某日期加上天数或减去天数 ,两日期相减的天数等. 实现要求: 实现运算符加与减的重载 设计一个日期类Date,包括年. ...

  4. 蓝桥杯日期计算java_日期类的使用(java)-蓝桥杯

    蓝桥杯日期问题常考,java提供了日期类很方便: //日历类 Calendar c = Calendar.getInstance(); // 获取实例化对象 Date date =c.getTime( ...

  5. 【转载】Python日期时间模块datetime详解与Python 日期时间的比较,计算实例代码

    本文转载自脚本之家,源网址为:https://www.jb51.net/article/147429.htm 一.Python中日期时间模块datetime介绍 (一).datetime模块中包含如下 ...

  6. Python 日期和时间戳的转换

    Python 日期和时间戳的转换 1. Python中处理时间的模块 Python中处理时间的模块有time.datetime和calendar. 在Python中表示时间的方式: 时间戳:10位整数 ...

  7. 标题 日期问题java蓝桥杯,日期类的使用(java)-蓝桥杯

    蓝桥杯日期问题常考,java提供了日期类很方便: //日历类 Calendar c = Calendar.getInstance(); // 获取实例化对象 Date date =c.getTime( ...

  8. JS日期格式化(从YYYY-MM-DD到日期类)

    2019独角兽企业重金招聘Python工程师标准>>> 字符串格式日期利用阅读,但不利于标准化存储,可以通过以下函数转化为Javascript日期类: // date = '2015 ...

  9. python普通类实现接口_python之面向对象(接口和抽象类)

    一.接口 什么是接口 继承有两种用途: 1:继承基类的方法,并且做出自己的改变或者扩展(代码重用). 2:声明某个子类兼容于某基类,定义一个接口类Interface,接口类中定义了一些接口名(就是函数 ...

  10. [转载] python日期时间使用详解和定时器使用讲解

    参考链接: Python日期时间 python中一个关于日期时间非常重要的模块是datetime模块,使用前先将它导入到项目中,import datetime. 获取当前时间 now=datetime ...

最新文章

  1. Android自定义View实践 空气质量检测 pm2.5
  2. 算法复习第三章分治法
  3. Covariance and Contravariance in C#, Part One
  4. 15 CT04创建特性程序DUMP解决方法
  5. mtr和nmap命令
  6. 电商大促首焦背景素材|大火C4D元素
  7. Error building results for action sayHello in namespace /inteceptor -
  8. Python基础学习Day3 数据类型的转换、int、str、bool、字符串的常用方法、for循环...
  9. cisco ip phone 7911 安装
  10. 计算机文化基础简答题
  11. 隐语义模型(LFM)
  12. stm8s定时器输出比较模式
  13. 封装802.1Q与 ISL的区别
  14. flume笔记(四) Channal
  15. ngx_shmtx_lock 分析
  16. 2022做跨境为什么要首选Lazada和shopee,现在入驻会面临哪些挑战和机遇?
  17. 谷歌浏览器选择已保存的账号密码,输入框变色
  18. Windows的cmd中cd指令切换路径
  19. C语言中“.”与-的区别
  20. C语言零基础入门习题(八)四则运算

热门文章

  1. Springcloud实战(五)微服务网关
  2. java 图片特效_强大的Java图像滤镜特效类库Java Image Filters
  3. ahb总线协议主机_AMBA总线协议之一文看懂AMBA2 AHB2与AMBA3 AHBLite总线协议的区别
  4. 非酋用计算机弹唱,非酋简谱 薛明媛/朱贺 听说爱情就是这样子
  5. 递归下降分析法的基本思想。_八大算法思想总结提高
  6. Hadoop下虚拟机的创建与克隆
  7. python采用面向对象编程模式吗_python基础5-面向对象编程
  8. Javascript特效:tab标签
  9. 对anaconda虚拟环境进行迁移
  10. CV中必要的数学知识_奇异值的物理意义是什么?