根据年度参数计算财政年度第一天的方法
本文关键字:第一天 方法 计算 参数 | 更新日期: 2023-09-27 18:19:03
我正在尝试创建一个简单的方法,它可以以以下格式接收财政年度期间:
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;
}
我只是不知道如何给startofinancialyear赋值,甚至不知道是否有更好的方法来一起做这些。
抱歉,如果这已经回答了以前,但我所能找到的是基于当前DateTime.Now
值计算财政年度开始的示例,在我的情况下,每次调用该方法时此值可能不同。
为了澄清我的问题,围绕我的任务的事实如下:
财政年度在这种情况下开始将始终是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;
}
}
我会滚动你自己的类型,像这样:-
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);
}
}
这里的小提琴