关于datetime和time有几个疑惑的

1、datetime.datetime.now()——为什么需要两个datetime才能返回当前时间,同样的time只需要time.localtime()

后来明白了datetime.datetime.now()——前一个datetime是py文件的名字,中间的datetime是类名,now是方法

2、格式化输出“%H%M%S”,同样是格式化输出,为什么一个是datetime.datetime.strftime("%H%M%S"),另一个是time.strftime("%H%M%S",time.localtime())

注意datetime.datetime.strftime是类的方法,注意上图,datetime.datetime.now()返回的是一个datetime的实例化对象。所以可以直接使用datetime.datetime.strftime方法

而time.strftime()是time模块的方法,注意下图,time.localtime()返回的是time.struct_time对象,这个对象是没有strftime的方法自然报错,用法time.strftime(格式,时间)

(后来才发现datetime.datetime.strftime(datetime.datetime.now(), "%H%M%S")一样可以)

注意1、datetime.datetime.strftime(时间,格式)

  2、time.strftime(格式,时间)

--------------------------------------我是分割线--------------------------------------

 

  

(以下为个人实现)

下面继续说最近需要使用到的找上年同期数的一些方法思路。

使用到datetime.timedelta日期的加减方法,还有calendar.monthrange()获取本月天数的方法

1、首先分别构造

本月1号datetime——date_now = datetime.datetime(year=year, month=month, day=1) # 构造本月1号datetime

本月最后一天的datetime

2、由于timedelta最大只支持到days参数,本月1号减1就是上月的最后一天,就能得到确定的上月值;本月最后一天+1就是下月的第一天

3、不断重复调用,返回对应月份即可

4、没有加上日day的参数,主要是日的不确定性没想明白该怎么弄比较好,比如20160229的上年同期数应该怎么写,如果有思路的伙伴不妨赐教

  1. #!/usr/bin/env python
  2. # -*- coding:utf-8 -*-
  3. # Datetime:2018/7/13 0:54
  4. # Author:Xzs
  5.  
  6. """
  7. 功能:传入日期类似“201807”格式,年份及月份参数,例如
  8. date_before("201807", year=1, month=7)——返回上年同期7月前的日期,得到“201612”
  9. date_after("201807", year=1, month=6)——返回下年同期6月后的日期,得到“202001”
  10. date_before("201807", year=1, month=0)——上年同期
  11. """
  12.  
  13. import datetime
  14. from datetime import timedelta
  15. import calendar
  16.  
  17. import sys
  18. reload(sys)
  19. sys.setdefaultencoding("utf-8")
  20.  
  21. # 返回传入日期的上月
  22. def last_one_month(date):
  23. year = int(date[:4])
  24. month = int(date[4:])
  25. date_now = datetime.datetime(year=year, month=month, day=1) # 构造本月1号datetime
  26. date_last_month = date_now - timedelta(days=1) # 上月datetime
  27. return date_last_month.strftime("%Y%m")
  28.  
  29. # 返回传入日期的下一个月
  30. def next_one_month(date):
  31. year = int(date[:4])
  32. month = int(date[4:])
  33. a, b = calendar.monthrange(year, month) # a,b——weekday的第一天是星期几(0-6对应星期一到星期天)和这个月的所有天数
  34. date_now = datetime.datetime(year=year, month=month, day=b) # 构造本月1号datetime
  35. date_next_month = date_now + timedelta(days=1) # 上月datetime
  36. return date_next_month.strftime("%Y%m")
  37.  
  38. def date_before(date, year=None, month=None):
  39. print u"%s年%s月前的日期是:" % (year if year else "-", month if month else "-"),
  40. if year >= 1:
  41. month = 12 * year + month
  42.  
  43. if month > 1:
  44. for m in range(1, month + 1):
  45. new_date = last_one_month(date) # 返回上个月,再以上个月为基础,循环计算得到最终月
  46. date = new_date
  47. elif month == 1:
  48. new_date = last_one_month(date)
  49. elif month == 0:
  50. new_date = date
  51.  
  52. # 如果不输入参数,默认返回本日期
  53. if year is None and month is None:
  54. new_date = date
  55. print new_date
  56. return new_date
  57.  
  58. def date_after(date, year=None, month=None):
  59. print u"%s年%s月后的日期是:" % (year if year else "-", month if month else "-"),
  60. if year >= 1:
  61. month = 12 * year + month
  62.  
  63. if month > 1:
  64. for m in range(1, month + 1):
  65. new_date = next_one_month(date) # 返回下个月,再以下个月为基础,循环计算得到最终月
  66. date = new_date
  67. elif month == 1:
  68. new_date = next_one_month(date)
  69. elif month == 0:
  70. new_date = date
  71.  
  72. # 如果不输入参数,默认返回本日期
  73. if year is None and month is None:
  74. new_date = date
  75. print new_date
  76. return new_date
  77.  
  78. if __name__ == '__main__':
  79. # next_day("20180501",day=5)
  80. # last_day("20160301",day=1,year=5)
  81. date_before("201801")
  82. date_after("201807")

  

 

(发布后看书后发现,对于大多数基本的日期和时间处理,datetime足够,但如果需要更复杂的日期操作,可以使用dateutil模板)

以下部分为python自带dateutil模块实现年月日的加减,大神造的车子功能基本完善,道行不够未发现,就像车子本来有自动巡航功能,我居然自己找个机械臂去模拟控制,还时不时失灵o(╯□╰)o)

推荐看下《Python Cookbook》第三版中文v3.0.0.pdf,百度自己找资源。新手进阶必备。

  1. #!/usr/bin/env python
  2. # -*- coding:utf-8 -*-
  3. # Datetime:2018/8/1 19:09
  4. # Author:Xzs
  5.  
  6. import datetime
  7. from datetime import timedelta
  8. from dateutil.relativedelta import relativedelta
  9.  
  10. a = datetime.datetime.now()
  11. b = datetime.datetime.strftime(a, "%H%M%S")
  12. print b
  13. c = relativedelta(years=1,months=1,days=1)
  1. d = relativedelta(years=-1,months=-1,days=-1)
  1. print a + c

python datetime和time的一些疑惑解答 及 获取上年同期、上月等日期的更多相关文章

  1. Django model '__week_day'与python datetime的weekday()

    上周出了个bug,按星期几查询数据的时候,发现查到的数据与显示的星期几并不相符,后来发现代码中按星期几查询,有的地方用的是Django QuerySet提供的'__week_day',有的地方用的是p ...

  2. OpenLDAP使用疑惑解答及使用Java完成LDAP身份认证

    导读 LDAP(轻量级目录访问协议,Lightweight Directory Access Protocol)是实现提供被称为目录服务的信息服务.目录服务是一种特殊的数据库系统,其专门针对读取,浏览 ...

  3. python datetime 时间日期处理小结

    python datetime 时间日期处理小结 转载请注明出处:http://hi.baidu.com/leejun_2005/blog/item/47f340f1a85b5cb3a50f5232. ...

  4. python datetime笔记

    python datetime笔记 http://mint-green.diandian.com/post/2011-09-09/4892024 获取当前时间,并通过字符串输出. 格式为:%Y-%m- ...

  5. python datetime模块strptime/strptime format常见格式命令_施罗德_新浪博客

    python datetime模块strptime/strptime format常见格式命令_施罗德_新浪博客     python datetime模块strptime/strptime form ...

  6. python datetime模块详解

    datetime是python当中比较常用的时间模块,用于获取时间,时间类型之间转化等,下文介绍两个实用类. 一.datetime.datetime类: datetime.datetime.now() ...

  7. python datetime学习

    Python中处理时间的模块datetime, 这个模块里包含的类也叫datetime,所以要使用需要先import from datetime import datetime 获取当前日期和时间 d ...

  8. python datetime和unix时间戳之间相互转换

                                python datetime和unix时间戳之间相互转换 1.代码:    import time    import datetime # ...

  9. Python datetime 格式化字符串:strftime()

    Python datetime 格式化字符串:strftime()   Python 的datetime模块 其实就是date和time 模块的结合, 常见的属性方法都比较常用 比如: datetim ...

随机推荐

  1. [2018CCPC吉林赛区(重现赛)- 感谢北华大学] 补题记录 躁起来

    1007 High Priestess 埃及分数 1008 Lovers 线段树维护取膜意义下的区间s和. 每个区间保存前缀lazy和后缀lazy. #include <iostream> ...

  2. HDU2874 Connections between cities 最近公共祖先

    第一次按常规的方法求,将所有的查询的u,v,和最近公共祖先都保存起来,然后用tarjan+并查集求最近公共祖先.因为询问的次数过多,所以在保存查询的时候总是MLE,后来参考了一下别人的代码,才突然觉悟 ...

  3. hdu 5902 GCD is Funny

    Problem Description Alex has invented a new game for fun. There are n integers at a board and he per ...

  4. Unsolved输入格式错误1022

    https://pintia.cn/problem-sets/994805342720868352/problems/994805480801550336

  5. Java面试-动态规划与组合数

    最近在刷力扣上的题目,刷到了65不同路径,当初上大学的时候,曾在hihocoder上刷到过这道题目,但是现在已经几乎全忘光了,大概的知识点是动态规划,如今就让我们一起来回顾一下. 从题目说起 题目原文 ...

  6. 记一次tomcat内存大涨到溢出的经历

    前一段时间提交了一个产品版本给测试人员测试,测试结果简直出人意料! 测试一段时间后页面就卡死了,当时根据这个现象下意识的怀疑是卡到数据库这一层,然后查看数据库连接相关的参数,如意料之中的相似,连接数太 ...

  7. 编写一个函数来反转某个二进制型里的字节顺序(erlang)

    reverse_byte(<<>>) -> <<>>; reverse_byte(<<Header:8, Tail/bits>& ...

  8. 2019最新WEB全栈架构师第八期视频教程

    下载链接:https://www.yinxiangit.com/117.html

  9. KMP算法C代码

    贴上C代码作参考,关于算法,可以参考网上的博文,但不要参考太多,一两篇相近的即可. #include <stdio.h> #include <stdlib.h> #includ ...

  10. java必学技能

    一:系统架构师是一个最终确认和评估系统需求,给出开发规范,搭建系统实现的核心构架,并澄清技术细节.扫清主要难点的技术人员.主要着眼于系统的“技术实现”.因此他/她应该是特定的开发平台.语言.工具的大师 ...