如何根据当前日期时间发现财务年度?

ven*_*kat 6 c# regex linq asp.net .net-3.5

我需要一个基于当前或今天的日期时间的财政年度.

假设如果我们考虑今天的日期是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
.
.
.
Run Code Online (Sandbox Code Playgroud)

等......

另一个例子:如果我们把今天的日期时间为16April2012,则输出需要为 Financial Year 2013FY13.

请使用C#,. Net3.5中的LINQ或Regex帮助如何以非常短的格式实现相同的目标

Rus*_*Cam 16

几种扩展方法

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"));
    }
}
Run Code Online (Sandbox Code Playgroud)


And*_*row 5

我通过创建一个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();
    }
}
Run Code Online (Sandbox Code Playgroud)

其他要点:

  • 看一下IFormatProvider,看看如何自定义格式(可以提供ToString的重载,该重载采用DateTime一样的格式参数。
  • 重写Equals,并实现IEquitable以提供相等性。
  • 实现IComparable进行比较。
  • 您也可以为该类实现自己的== <>> =和<=运算符。