计算C#中的日期时间差异

时间:2016-05-10 01:44:57

标签: c# datetime if-statement

您好我正在解决一个问题,根据C#中的返回日期和截止日期的差异来计算一些库。现在这个问题有一些限制,比如

  

如果更改退货年份,例如如果退货年份大于到期日期年度则罚款为10000。截止日期“2015年12月31日”和返回日期“01/01/2016”然后还罚款10000。

     

如果更改月份,则罚款为500 *月末。

     

如果更改返回日,那么罚款是迟到15天。

     

其他罚款为0。

现在我写下了这个函数:

static int CalcFine (int[] returnedOn, int[] dueOn) {
    int returnD = returnedOn[0];
    int returnM = returnedOn[1];
    int returnY = returnedOn[2];
    int dueD = dueOn[0];
    int dueM = dueOn[1];
    int dueY = dueOn[2];

    if (returnY > dueY) {
        return 10000;
    } else if (returnY < dueY) {
        return 0;
    } else {
        if (returnM > dueM) {
            return (returnM - dueM) * 500;
        } else if (returnM < dueM) {
            return 0;
        } else {
            if (returnD > dueD) {
                return (returnD - dueD) * 15;
            } else {
                return 0;
            }
        }
    }

}

我读到了C#中的DateTime类,它具有相当简洁的功能,可以将两个日期的差异作为总天数,总分钟数等返回。但是,根据年份,精细的约束是不同的,月和日,我不确定是否有任何其他内置功能来解决上述问题。总之,我试图找到是否有另一种简单的方法来解决上述问题而不使用如此多的if-else。

3 个答案:

答案 0 :(得分:2)

您可以在几天,几小时或几分钟内获得差异。

DateTime fromdate = new DateTime(2012,1,1);
DateTime todate = DateTime.Now;

TimeSpan diff = todate - fromdate;
int differenceInDays = diff.Days;

如果您想尝试不同的验证和业务规则。请遵循以下代码

public double GetFineAmount(DateTime DueDate)
{
    DateTime dt = DateTime.Now;
    int yeardiff, monthdiff, daydiff;

    yeardiff = dt.Year - DueDate.Year;
    if (yeardiff > 0) return 10000;
    monthdiff = dt.Month - DueDate.Month;
    if (monthdiff > 0) return 500 * monthdiff;
    daydiff = dt.Day - DueDate.Day;
    if (daydiff > 0) return 15 * daydiff;
    return 0;
}

答案 1 :(得分:1)

再次编辑..改变了字符串模式。我想我需要睡一觉......

    static int CalcFine (string returnedOn, string dueOn)
    {
        DateTime returnedDate = DateTime.ParseExact(
            returnedOn, "d M yyyy", CultureInfo.InvariantCulture);
        DateTime dueDate = DateTime.ParseExact(
            dueOn, "d M yyyy", CultureInfo.InvariantCulture);

        if (returnedDate < dueDate)
            return 0;
        if (returnedDate.Year > dueDate.Year)
            return 10000;
        if (returnedDate.Month > dueDate.Month)
            return 500 * (returnedDate.Month - dueDate.Month);
        if (returnedDate.Day > dueDate.Day)
            return 15 * (returnedDate.Day - dueDate.Day);
        else
            return 0;
    }

答案 2 :(得分:0)

DateTime是一个功能强大的工具。但是你不想让这个过于复杂。

如果你只是发现两个日期之间的差异,那么等式变得更容易管理,而不是试图减去日期。

static int CalcFine(DateTime returnedOn, DateTime dueOn)
    {

        TimeSpan dateDiff = (returnedOn - dueOn);
        int TotalDays = dateDiff.Days;
        if (TotalDays >= 365)
        {
            return 10000;
        }
        else if(TotalDays < 365 && TotalDays > 30 && TotalDays % 30 > 1)
        {
            return (500 * (TotalDays % 30));
        }
        else if(TotalDays < 30 && TotalDays > 0)
        {
            return 15 * TotalDays;
        }
        else
        {
            return 0;
        }
    }