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)); } }
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))); }