根据年份参数计算财政年度第一天的方法

时间:2014-08-21 16:02:03

标签: c# .net

我试图制作一个简单的方法,可以按以下格式接收财政年度:

2014-2015

我需要方法返回DateTime对象,特别是该财务期的第一天,在上述情况下,这将是01/04/2014 00:00:00.000

我还需要最终能够计算出该财政期间的最后一天,但我不确定这是否应该是一个不同的方法,或者在同一方法中使用附加参数来指示哪个日期是必需的。

到目前为止,我能够想到的是:

public static DateTime PermitValidFrom (string financialYear)
{
    string startFinancialYear;
    string endFinancialYear;
    DateTime startOfFinancialYear;

    startFinancialYear = financialYear.Substring(1, 4);
    endFinancialYear = financialYear.Substring(6, 4);

//need to work out start of the financial year based on this period

    return startOfFinancialYear;
}

我只是不知道如何为startOfFinancialYear提供一个值,或者即使有更好的方法可以一起完成这一切。

如果之前已经回答过道歉,但我能找到的只是基于当前DateTime.Now值计算财务年度开始的示例,在我的情况下,每次方法时此值都可能不同被调用。

2 个答案:

答案 0 :(得分:0)

为澄清我的问题,围绕我的任务的事实如下:

财政年度在这种情况下开始将始终是01/04(4月1日) 在这种情况下,财政年度结束将始终是3月的最后一天。

如果这是周六,周日或任何其他日子在这种情况下无关紧要。

所有我必须继续用连字符分隔两年,从这个开始我需要那个财政年度的开始和那个财政年度的结束。我认为事实很直接。

无论如何,当我收到投票并且没有真正的建设性反馈时,我最终想出了我自己的解决方案,并且认为我会发布它以防万一它帮助其他人。

public static DateTime FinancialPeriods(string financialYear, bool end)
{
    string startFinancialYear;
    string endFinancialYear;
    DateTime startOfFinancialYear;
    DateTime endOfFinancialYear;

    startFinancialYear = financialYear.Substring(0, 4);
    endFinancialYear = financialYear.Substring(5, 4);

    startOfFinancialYear = new DateTime(int.Parse(startFinancialYear), 4, 1);
    endOfFinancialYear = new DateTime(int.Parse(endFinancialYear), 4, 1).AddDays(-1);

    if (end == false)
    {
        return startOfFinancialYear;
    }

    else
    {
        return endOfFinancialYear;
    }   
}

答案 1 :(得分:0)

我会推出自己的类型,如下所示: -

    using System;
    using System.Text.RegularExpressions;

    public class FinancialPeriod
    {
    const string PATTERN = @"^([0-9]{4})\s?-\s?([0-9]{4})$";

    public FinancialPeriod()
    {
        this.Year = DateTime.Today.Year;

        if (DateTime.Today.Month > 3)
        {
            this.From = new DateTime(Year, 4, 1);
            this.To = new DateTime(Year + 1, 3, DaysInMarch(Year + 1));
        }
        else
        {
            this.From = new DateTime(Year - 1, 4, 1);
            this.To = new DateTime(Year, 3, DaysInMarch(Year));
        }
    }

    public FinancialPeriod(string period) : this()
    {

        Match m = Regex.Match(period, PATTERN);
        this.From = new DateTime(Int32.Parse(m.Groups[1].Value), 4, 1);
        this.To = new DateTime(Int32.Parse(m.Groups[2].Value), 3, DaysInMarch(Int32.Parse(m.Groups[2].Value)));
    }

    private DateTime From { get; set; }
    private DateTime To { get; set; }
    private int Year { get; set; }

    public string period
    {
        get
        {
            return string.Format("{0} - {1}", this.From.Year, this.To.Year);
        }
    }

    private int DaysInMarch(int yr)
    {
        return DateTime.DaysInMonth(yr, 03);
    }
}

小提琴here