[CPyUG] 跨年度计算月份的问题

classic Classic list List threaded Threaded
6 messages Options
Reply | Threaded
Open this post in threaded view
|

[CPyUG] 跨年度计算月份的问题

郁夫
需要计算一个月度区间的数据,月度区间是从上一月的26日至本月的25日
例如:url  month/201102/  求11年2月的区间
 
用如下处理
 
def monthcount(request,offset):
    if offset:
        edate = datetime.datetime.strptime(offset+'25','%Y%m%d')
        sdate = edate.replace(month=edate.month-1,day=edate.day+1)
    return render_to_response('stat/yls_mon_finish.html', {'sdate':sdate,'edate':edate})
 
但是如果求 11 年1月  month/201101/ 
用上面的方法则会出现错误,提示月要在1~12之间。
 
我想可以在月份相减为0时,再用年份相减,应该可以解决。但是觉得python里应该有
更方便的方法,特此请教。

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
Reply | Threaded
Open this post in threaded view
|

Re: [CPyUG] 跨年度计算月份的问题

Leo Jay
2011/3/23 OA MATSUI <[hidden email]>:

> 需要计算一个月度区间的数据,月度区间是从上一月的26日至本月的25日
> 例如:url  month/201102/  求11年2月的区间
>
> 用如下处理
>
> def monthcount(request,offset):
>     if offset:
>         edate = datetime.datetime.strptime(offset+'25','%Y%m%d')
>         sdate = edate.replace(month=edate.month-1,day=edate.day+1)
>     return render_to_response('stat/yls_mon_finish.html',
> {'sdate':sdate,'edate':edate})
>
> 但是如果求 11 年1月  month/201101/
> 用上面的方法则会出现错误,提示月要在1~12之间。
>
> 我想可以在月份相减为0时,再用年份相减,应该可以解决。但是觉得python里应该有
> 更方便的方法,特此请教。
>

我想可以先取得当前月的第1天,然后减一天就得到上一个月,再把结果的日期改成26号:
def replace_day_of_date(date, day):
    return date.replace(date.year, date.month, day)

edate = datetime.datetime.strptime(offset+'25','%Y%m%d')
end_of_last_month = replace_day_of_date(edate, 1) - datetime.timedelta(days=1)
sdate = replace_day_of_date(end_of_last_month, 26)

--
Best Regards,
Leo Jay

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
Reply | Threaded
Open this post in threaded view
|

Re: [CPyUG] 跨年度计算月份的问题

yrh-2
In reply to this post by 郁夫
sdate = edate.replace(month=(edate.month-1+12)%12,day=edate.day+1)
怎么样?

在 2011年3月23日 上午11:13,OA MATSUI <[hidden email]>写道:
需要计算一个月度区间的数据,月度区间是从上一月的26日至本月的25日
例如:url  month/201102/  求11年2月的区间
 
用如下处理
 
def monthcount(request,offset):
    if offset:
        edate = datetime.datetime.strptime(offset+'25','%Y%m%d')
        sdate = edate.replace(month=edate.month-1,day=edate.day+1)
    return render_to_response('stat/yls_mon_finish.html', {'sdate':sdate,'edate':edate})
 
但是如果求 11 年1月  month/201101/ 
用上面的方法则会出现错误,提示月要在1~12之间。
 
我想可以在月份相减为0时,再用年份相减,应该可以解决。但是觉得python里应该有
更方便的方法,特此请教。

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp



--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
Reply | Threaded
Open this post in threaded view
|

Re: [CPyUG] 跨年度计算月份的问题

daniel.zhy
我想到的最简单方法是不要把201102想成date,想成int更容易处理。
如果x%100 为1的时候,就x-89. 如果不是1就x-1.

在 2011年3月23日 上午11:51,yrh <[hidden email]>写道:
sdate = edate.replace(month=(edate.month-1+12)%12,day=edate.day+1)
怎么样?

在 2011年3月23日 上午11:13,OA MATSUI <[hidden email]>写道:

需要计算一个月度区间的数据,月度区间是从上一月的26日至本月的25日
例如:url  month/201102/  求11年2月的区间
 
用如下处理
 
def monthcount(request,offset):
    if offset:
        edate = datetime.datetime.strptime(offset+'25','%Y%m%d')
        sdate = edate.replace(month=edate.month-1,day=edate.day+1)
    return render_to_response('stat/yls_mon_finish.html', {'sdate':sdate,'edate':edate})
 
但是如果求 11 年1月  month/201101/ 
用上面的方法则会出现错误,提示月要在1~12之间。
 
我想可以在月份相减为0时,再用年份相减,应该可以解决。但是觉得python里应该有
更方便的方法,特此请教。

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp



--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
Reply | Threaded
Open this post in threaded view
|

Re: [CPyUG] 跨年度计算月份的问题

yrh-2
In reply to this post by yrh-2
搞错了,年份还是要加判断。
这样应该行吧?
sdate = edate.replace(year=(edate.year if edate.month!=1 else edate.year-1), month=(edate.month-1+12)%12,day=edate.day+1)

还真要对年份进行判断!

在 2011年3月23日 上午11:51,yrh <[hidden email]>写道:
sdate = edate.replace(month=(edate.month-1+12)%12,day=edate.day+1)
怎么样?

在 2011年3月23日 上午11:13,OA MATSUI <[hidden email]>写道:

需要计算一个月度区间的数据,月度区间是从上一月的26日至本月的25日
例如:url  month/201102/  求11年2月的区间
 
用如下处理
 
def monthcount(request,offset):
    if offset:
        edate = datetime.datetime.strptime(offset+'25','%Y%m%d')
        sdate = edate.replace(month=edate.month-1,day=edate.day+1)
    return render_to_response('stat/yls_mon_finish.html', {'sdate':sdate,'edate':edate})
 
但是如果求 11 年1月  month/201101/ 
用上面的方法则会出现错误,提示月要在1~12之间。
 
我想可以在月份相减为0时,再用年份相减,应该可以解决。但是觉得python里应该有
更方便的方法,特此请教。

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp



--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
Reply | Threaded
Open this post in threaded view
|

Re: [CPyUG] 跨年度计算月份的问题

郁夫
多谢各位!
 
Leo Jay 的方法比较好理解,执行通过。
 
daniel.zhy 的好像最简单,就是理解起来比较困难点。
 
yrh的方法,执行时仍有错误,
提示依旧是 month must be in 1..12,
应该是 month=(edate.month-1+12)%12 这里有问题

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp