C#中计算两个时间差的方法

C#中计算两个时间差的方法 

   背景:如图所示,起始日期的时间控件名为loanStartDate,终止日期的时间控件名为loanEndDate,约定期限是文本控件,名为limitDate。(这里的控件都是C#控件类型)

   目的:当改变起始日期或者终止日期时,自动计算出约定期限,两个时间的月份要是一个月多一天就记为两个月。以月份为单位(自然月)

    可能有人知道python带有时间函数,datetime和time模块,deltatime有days方法和second方法等,但是难以安自然月的方式计算出相差的月数,早期我的做法是

def DateDiff(a,b,c):
    if a=="month":
        m=abs((c-b).Days/30)
    if a=="day":
        m=abs((c-b).Days)
    if a=="year":
        m=abs((c-b).Days/365)
    return m

if(loanEndDate.SelectedDate>DateTime.Parse("1900-01-01") and loanStartDate.SelectedDate>DateTime.Parse("1900-01-01")):
    limitDate.Text=str(DateDiff("month",loanStartDate.SelectedDate,loanEndDate.SelectedDate))+" 个月"
else:
    limitDate.Text=""

但是这种方法不是以自然月形式做的,现在对其做了改正,如下:

import datetime,time#其实导入python的这个模块没用到

if(loanEndDate.SelectedDate >DateTime.Parse("1900-01-01") and loanStartDate.SelectedDate >DateTime.Parse("1900-01-01")):#只是为了判断是否输入了起始日期和终止日期
    year=loanEndDate.SelectedDate.Year-loanStartDate.SelectedDate.Year#--C#中DateTime类型有Year、#Month、Day等属性
    month=loanEndDate.SelectedDate.Month-loanStartDate.SelectedDate.Month
    day=loanEndDate.SelectedDate.Day-loanStartDate.SelectedDate.Day

#考虑闰年情况,
    if(loanEndDate.SelectedDate.Year%4==0 and loanEndDate.SelectedDate.Month==2 and loanEndDate.SelectedDate.Day==29 and loanStartDate.SelectedDate.Month==2 and loanStartDate.SelectedDate.Year %4 !=0):
        if(day>1):#若终止日期是闰年的2月29,其实日期是非闰年的2月份,
            month=month+1 

    else:
        if(day>0):
            month=month+1
    limitDate.Text=str(year*12+month)+" 个月"
else:
    pass

轻松搞定。

posted @ 2013-03-17 21:06  GIS民工  阅读(615)  评论(0编辑  收藏  举报