コード例 #1
0
        private static DateTime Aux_GetRoundDate(this DateTime dt, TenorUnit tu)
        {
            int nb_units = dt.GetNumberOfUnit(tu);

            switch (tu)
            {
            case TenorUnit.Hour:
            case TenorUnit.Min:
            case TenorUnit.Sec:
                break;

            case TenorUnit.Month:
            case TenorUnit.Day:
                nb_units -= 1;
                break;

            case TenorUnit.Year:
            case TenorUnit.None:
                nb_units = 0;
                break;
            }
            dt = dt.AddTenor(new Tenor(-nb_units, tu));
            TenorUnit tuN = tu.GetLowerUnit(skipWeek: true);

            if (tuN == TenorUnit.None)
            {
                return(dt);
            }
            else
            {
                return(dt.Aux_GetRoundDate(tuN));
            }
        }
コード例 #2
0
 public static DateTime GetRoundDate(this DateTime dt, TenorUnit tu)
 {
     if (tu == TenorUnit.Week)
     {
         int      daysOffset = ((int)dt.DayOfWeek == 0 ? 7 : (int)dt.DayOfWeek) - 1;
         DateTime newDate    = dt.AddDays(-daysOffset);
         return(newDate.Aux_GetRoundDate(TenorUnit.Hour));
     }
     else if (tu == TenorUnit.Day)
     {
         //if (dt.Hour == 0 && dt.Minute == 0 && dt.Second == 0)
         //return dt.AddDays(-1);
     }
     return(dt.Aux_GetRoundDate(tu.GetLowerUnit(skipWeek: true)));
 }