python datetime和time的一些疑惑解答 及 获取上年同期、上月等日期
关于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的上年同期数应该怎么写,如果有思路的伙伴不妨赐教
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Datetime:2018/7/13 0:54
# Author:Xzs """
功能:传入日期类似“201807”格式,年份及月份参数,例如
date_before("201807", year=1, month=7)——返回上年同期7月前的日期,得到“201612”
date_after("201807", year=1, month=6)——返回下年同期6月后的日期,得到“202001”
date_before("201807", year=1, month=0)——上年同期
""" import datetime
from datetime import timedelta
import calendar import sys
reload(sys)
sys.setdefaultencoding("utf-8") # 返回传入日期的上月
def last_one_month(date):
year = int(date[:4])
month = int(date[4:])
date_now = datetime.datetime(year=year, month=month, day=1) # 构造本月1号datetime
date_last_month = date_now - timedelta(days=1) # 上月datetime
return date_last_month.strftime("%Y%m") # 返回传入日期的下一个月
def next_one_month(date):
year = int(date[:4])
month = int(date[4:])
a, b = calendar.monthrange(year, month) # a,b——weekday的第一天是星期几(0-6对应星期一到星期天)和这个月的所有天数
date_now = datetime.datetime(year=year, month=month, day=b) # 构造本月1号datetime
date_next_month = date_now + timedelta(days=1) # 上月datetime
return date_next_month.strftime("%Y%m") def date_before(date, year=None, month=None):
print u"%s年%s月前的日期是:" % (year if year else "-", month if month else "-"),
if year >= 1:
month = 12 * year + month if month > 1:
for m in range(1, month + 1):
new_date = last_one_month(date) # 返回上个月,再以上个月为基础,循环计算得到最终月
date = new_date
elif month == 1:
new_date = last_one_month(date)
elif month == 0:
new_date = date # 如果不输入参数,默认返回本日期
if year is None and month is None:
new_date = date
print new_date
return new_date def date_after(date, year=None, month=None):
print u"%s年%s月后的日期是:" % (year if year else "-", month if month else "-"),
if year >= 1:
month = 12 * year + month if month > 1:
for m in range(1, month + 1):
new_date = next_one_month(date) # 返回下个月,再以下个月为基础,循环计算得到最终月
date = new_date
elif month == 1:
new_date = next_one_month(date)
elif month == 0:
new_date = date # 如果不输入参数,默认返回本日期
if year is None and month is None:
new_date = date
print new_date
return new_date if __name__ == '__main__':
# next_day("20180501",day=5)
# last_day("20160301",day=1,year=5)
date_before("201801")
date_after("201807")
(发布后看书后发现,对于大多数基本的日期和时间处理,datetime足够,但如果需要更复杂的日期操作,可以使用dateutil模板)
以下部分为python自带dateutil模块实现年月日的加减,大神造的车子功能基本完善,道行不够未发现,就像车子本来有自动巡航功能,我居然自己找个机械臂去模拟控制,还时不时失灵o(╯□╰)o)
推荐看下《Python Cookbook》第三版中文v3.0.0.pdf,百度自己找资源。新手进阶必备。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Datetime:2018/8/1 19:09
# Author:Xzs import datetime
from datetime import timedelta
from dateutil.relativedelta import relativedelta a = datetime.datetime.now()
b = datetime.datetime.strftime(a, "%H%M%S")
print b
c = relativedelta(years=1,months=1,days=1)
d = relativedelta(years=-1,months=-1,days=-1)
print a + c
python datetime和time的一些疑惑解答 及 获取上年同期、上月等日期的更多相关文章
- Django model '__week_day'与python datetime的weekday()
上周出了个bug,按星期几查询数据的时候,发现查到的数据与显示的星期几并不相符,后来发现代码中按星期几查询,有的地方用的是Django QuerySet提供的'__week_day',有的地方用的是p ...
- OpenLDAP使用疑惑解答及使用Java完成LDAP身份认证
导读 LDAP(轻量级目录访问协议,Lightweight Directory Access Protocol)是实现提供被称为目录服务的信息服务.目录服务是一种特殊的数据库系统,其专门针对读取,浏览 ...
- python datetime 时间日期处理小结
python datetime 时间日期处理小结 转载请注明出处:http://hi.baidu.com/leejun_2005/blog/item/47f340f1a85b5cb3a50f5232. ...
- python datetime笔记
python datetime笔记 http://mint-green.diandian.com/post/2011-09-09/4892024 获取当前时间,并通过字符串输出. 格式为:%Y-%m- ...
- python datetime模块strptime/strptime format常见格式命令_施罗德_新浪博客
python datetime模块strptime/strptime format常见格式命令_施罗德_新浪博客 python datetime模块strptime/strptime form ...
- python datetime模块详解
datetime是python当中比较常用的时间模块,用于获取时间,时间类型之间转化等,下文介绍两个实用类. 一.datetime.datetime类: datetime.datetime.now() ...
- python datetime学习
Python中处理时间的模块datetime, 这个模块里包含的类也叫datetime,所以要使用需要先import from datetime import datetime 获取当前日期和时间 d ...
- python datetime和unix时间戳之间相互转换
python datetime和unix时间戳之间相互转换 1.代码: import time import datetime # ...
- Python datetime 格式化字符串:strftime()
Python datetime 格式化字符串:strftime() Python 的datetime模块 其实就是date和time 模块的结合, 常见的属性方法都比较常用 比如: datetim ...
随机推荐
- HZNU Training 2 for Zhejiang Provincial Collegiate Programming Contest 2019
赛后总结: T:今天下午参加了答辩比赛,没有给予队友很大的帮助.远程做题的时候发现队友在H上遇到了挫折,然后我就和她们说我看H吧,她们就开始做了另外两道题.今天一人一道题.最后我们在研究一道dp的时候 ...
- codeforces 869 E. The Untended Antiquity(树状数组)
题目链接:http://codeforces.com/contest/869/problem/E 题解:这题是挺好想到solution的但是不太好写,由于题目的特殊要求每个矩形不会重贴所以只要这两个点 ...
- BZOJ-2535 航空管制 toposort
题目传送门 题解: 如果正着连边,可以发现最困难的点是ti不好处理. 所以我们连反边,然后将ti转换成前面有n-ti+1架飞机起飞了作为限制条件. 对于第一问,直接toposort 然后反着输出求出的 ...
- Java并发编程之ThreadLocal解析
本文讨论的是JDK 1.8中的ThreadLocal ThreadLocal概念 ThreadLocal多线程间并发访问变量的解决方案,为每个线程提供变量的副本,用空间换时间. ThreadLocal ...
- mysql 查询参数尾部有空格时被忽略
最近再使用mysql时,无意见发现,当我查询参数尾部输入若干个空格时,依然可以查出和不加空格相同的结果,像这样 select * from wa where name='be ' 等同于 select ...
- Mybatis使用入门,这一篇就够了
mybatis中,封装了一个sqlsession 对象(里面封装有connection对象),由此对象来对数据库进行CRUD操作. 运行流程 mybatis有一个配置的xml,用于配置数据源.映射Ma ...
- STL中排序函数的用法(Qsort,Sort,Stable_sort,Partial_sort,List::sort)
都知道排序很重要,也学了各式各样的排序算法,冒泡.插入.归并等等,但其实在ACM比赛中,只要不是太慢的算法,都可以适用(除非某些题目卡时间卡的很死),这个时候,速度与技巧便成了关键,而在C++的标准库 ...
- DNA sequence(映射+BFS)
Problem Description The twenty-first century is a biology-technology developing century. We know tha ...
- JVM垃圾回收?看这一篇就够了!
深入理解JVM垃圾回收机制 1.垃圾回收需要解决的问题及解决的办法总览 1.如何判定对象为垃圾对象 引用计数法 可达性分析法 2.如何回收 回收策略 标记-清除算法 复制算法 标记-整理算法 分带收集 ...
- Fragment的创建与通信
由于这里涉及到接口回调的问题,所以先来看一看什么是接口回调: 这就好比老板和员工的微妙关系,老板需要员工去工作,员工挣钱了以后还要告诉老板自己挣了多少钱,然后由老板来处理这些钱. 首先创建一个接口: ...