我试图制作一个简单的方法,可以按以下格式接收财政年度:
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
值计算财务年度开始的示例,在我的情况下,每次方法时此值都可能不同被调用。
答案 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