python日期加减比较问题请教 100
关于python日期的一个问题,求大神帮助。给定一个日期,格式“%Y%m%d”,然后把这个日期与当天的日期相比,如果这个日期到当天没超过180天,则返回输入的日期和实际的...
关于python日期的一个问题,求大神帮助。
给定一个日期,格式“%Y%m%d”,然后把这个日期与当天的日期相比,如果这个日期到当天没超过180天,则返回输入的日期和实际的间隔天数,如果超过180天,则返回对应日期和180,然后再原日期上加180,再与当天日期比较
例如:
输入:20140401,返回{'20140401':21}
输入:20130101,返回{'20130101':180,'21030630':180,'20131227':115}
试了datetime模块,没能实现,求代码 展开
给定一个日期,格式“%Y%m%d”,然后把这个日期与当天的日期相比,如果这个日期到当天没超过180天,则返回输入的日期和实际的间隔天数,如果超过180天,则返回对应日期和180,然后再原日期上加180,再与当天日期比较
例如:
输入:20140401,返回{'20140401':21}
输入:20130101,返回{'20130101':180,'21030630':180,'20131227':115}
试了datetime模块,没能实现,求代码 展开
6个回答
展开全部
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | # time模块实现, 也是自带的 # 字符串不好计算~但是时间戳是固定的呀... # 计算结果中, 假定今天24日, 输入24, 输出0天, 输入25, 输出-1天 import time def f(tm): stamp = time.mktime(time.strptime(tm, "%Y%m%d" )) diff = int ((time.time() - stamp) / / 86400 ) if diff < = 180 : return {tm: str (diff)} else : d = {} while diff > 180 : d[tm] = 180 stamp + = 180 * 86400 diff = int ((time.time() - stamp) / / 86400 ) # 注意这里time.gmtime()返回的是0时区日期, 需要处理时区问题 tm = time.strftime( "%Y%m%d" , time.gmtime(stamp - time.timezone)) else : d[tm] = str (diff) return d if __name__ = = '__main__' : tm = '20160325' print (f(tm)) tm = '20171015' print (f(tm)) # 结果输出, 注意: 字典是没有固定顺序的 ''' {'20160921': 180, '20170320': 180, '20170916': '38', '20160325': 180} {'20171015': '9'} ''' |
展开全部
函数 date_dict 实现你的要求 (他还能处理晚于当天的日期,自己试一下)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | #!/usr/bin/python3 import datetime, sys def date_dict(date_str): today = datetime.date.today() d = datetime.datetime.strptime(date_str, '%Y%m%d' ).date() delta = today - d if delta.days < 0 : delta * = - 1 start = today else : start = d interval = datetime.timedelta( 180 ) ret = dict () while delta.days > 0 : x = min (interval, delta) ret[start.strftime( '%Y%m%d' )] = x.days delta - = interval start + = interval return ret if __name__ = = '__main__' : dd = date_dict(sys.argv[ 1 ]) for k in sorted (dd.keys()): print (k + ":" , dd[k]) |
展开全部
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | import datetime DAY = datetime.timedelta(days = 1 ) TODAY = datetime.date.today() DTFMT = '%Y%m%d' def _untiltoday(startdate, step = 180 ): stepday = step * DAY dt = startdate while 1 : if dt + stepday > = TODAY: yield dt, (TODAY - dt).days break else : yield dt, step dt + = stepday def mkdtdct(startdate, step = 180 ): return dict ([(dt.strftime(DTFMT), days) for dt, days in _untiltoday(startdate) ]) def str2dt(s, fmt = DTFMT ): return datetime.datetime.strptime(s, fmt).date() print mkdtdct(str2dt( "20130110" )) |
展开全部
http: //liuzhijun. iteye .com/blog/ 1874020
这个应该可以帮到你(请去掉所有空格)
这个应该可以帮到你(请去掉所有空格)
展开全部
看看calendar模块
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询