我需要基于当前或今天的日期时间的财政年度。
假设我们认为今天的日期是10 April 2011
,那么我需要输出为Financial Year 2012
,在某些情况下,我需要以FY12
的短格式显示相同的输出。我想要展示的两种方式。
在我们的要求中,考虑的财务年度是从April
(当年)到March
(明年)。
根据当前日期时间...输出的情况取决于当前日期时间落在下述期间或持续时间内。
From 01April2011 to 31March2012 - Financial Year 2012 or FY2012
From 01April2012 to 31March2013 - Financial Year 2013 or FY2013
From 01April2013 to 31March2014 - Financial Year 2014 or FY2014
.
.
.
等......
另一个例子:如果我们将今天的日期时间视为2012年4月16日,那么输出需要Financial Year 2013
和FY13
。
请使用C#,. Net3.5中的LINQ或Regex帮助如何以非常短的格式实现相同的目标
答案 0 :(得分:14)
一些扩展方法
public static class DateTimeExtensions
{
public static string ToFinancialYear(this DateTime dateTime)
{
return "Financial Year " + (dateTime.Month >= 4 ? dateTime.Year + 1 : dateTime.Year);
}
public static string ToFinancialYearShort(this DateTime dateTime)
{
return "FY" + (dateTime.Month >= 4 ? dateTime.AddYears(1).ToString("yy") : dateTime.ToString("yy"));
}
}
答案 1 :(得分:4)
我之前创建了一个FinancialYear
类:
public class FinancialYear
{
int yearNumber;
private static readonly int firstMonthInYear = 4;
public static FinancialYear Current
{
get { return new FinancialYear(DateTime.Today); }
}
public FinancialYear(DateTime forDate)
{
if (forDate.Month < firstMonthInYear) {
yearNumber = forDate.Year + 1;
}
else {
yearNumber = forDate.Year;
}
}
public override string ToString() {
return yearNumber.ToString();
}
}
其他要点:
答案 2 :(得分:1)
财务年度可变(例如公司财政年度可能在7月> 6月,而不是在4月和3月纳税年度之后)
/// <summary>
/// Extension method to get the start of the financial year
/// </summary>
public static DateTime GetStartOfFinancialYear(this DateTime date, int startMonthOfFinancialYear)
{
if (startMonthOfFinancialYear < 1 || startMonthOfFinancialYear > 12)
throw new ArgumentException("Must be between 1 and 12","startMonthOfFinancialYear");
DateTime rtn = new DateTime(date.Year,startMonthOfFinancialYear,1);
if (date.Month < startMonthOfFinancialYear)
{
// Current FY starts last year - e.g. given April to March FY then 1st Feb 2013 FY starts 1st April 20*12*
rtn = rtn.AddYears(-1);
}
return rtn;
}
// Example, Financial Year starts in July
DateTime startFY = DateTime.Now.GetStartOfFinancialYear(7);
DateTime endFY = startFY.AddYears(1).AddDays(-1);
答案 3 :(得分:1)
改善Russ&#39;回答上面,我建议:
public static string ToFYString(this DateTime dateTime, bool longFlag = false, int monthLimit = 3)
{
var format = longFlag ? "yyyy" : "yy";
return (dateTime.Month > monthLimit ? dateTime.AddYears(1).ToString(format) : dateTime.ToString(format));
}
.ToFYString()
.ToFYString(monthLimit: 9)
.ToFYString(true)
.ToFYString(true, 9)
答案 4 :(得分:1)
尝试以下代码以获取财政年度或期间值。
public int GetFinancialYear(DateTime date)
{
return date.Month > 6 ? date.Year + 1 : date.Year;
}
public int GetFinancialPeriod(DateTime date)
{
return date.Month > 6 ? date.Month - 6 : date.Month + 6;
}
答案 5 :(得分:0)
我不确定你为什么需要LINQ,但不会这样就足够了
DateTime today = DateTime.Today;
if(today.Month <= 3)
make this string "Financial Year " + today.ToString("yy")); // OR yyyy for 2013
else
"Financial Year " + today.AddYears(1).ToString("yy"));
答案 6 :(得分:0)
public class FinancialYear
{
public YearRepresentation ResolveFinancialYear(DateTime currentDate)
{
YearRepresentation financialYear = new YearRepresentation();
int year = (currentDate.Month >= 4) ? currentDate.AddYears(1).Year : currentDate.Year;
financialYear.SetYear(year);
return financialYear;
}
}
public class YearRepresentation
{
public string LongYear { get; set; }
public string ShortYear { get; set; }
public void SetYear(int year)
{
this.LongYear = "Financial Year " + year;
this.ShortYear = "FY " + year;
}
}
答案 7 :(得分:0)
这是查找当前财政年度的一个示例。
string FinYear=null;
if (DateTime.Today.Month > 3)
{
FinYear = "1/4/" + DateTime.Today.Year;
}
else
{
FinYear = "1/4/" + (DateTime.Today.Year - 1);
}
答案 8 :(得分:-1)
这里使用了 Valued Tuple(财务年度从 7 月开始,所以我使用了 7。 如果你愿意
<块引用>月年到月年
格式然后只需要使用开始日期和结束日期的月份和年份属性。
public static (DateTime, DateTime) GetCurrentFinacialYearDateRange()
{
if(DateTime.Now.Month >= 7)
{
DateTime startDate = new DateTime(DateTime.Today.Year, 7, 1); // 1st July this year
DateTime endDate = new DateTime(DateTime.Today.Year + 1, 7, 1).AddDays(-1); // Last day in June next year
return (startDate, endDate);
}
else
{
DateTime startDate = new DateTime(DateTime.Today.Year-1, 7, 1); // 1st July this year
DateTime endDate = new DateTime(DateTime.Today.Year, 7, 1).AddDays(-1); // Last day in June next year
return (startDate, endDate);
}
}