private string Translate(string keyword, DateTime targetDate) { string[] parts = keyword.Split('$'); int iFactor = 1; StringBuilder strBuf = new StringBuilder(); DateTime? varDate = null; VariableType vt = VariableType.Date; foreach (string p in parts) { if (Int32.TryParse(p, out int iTmp)) { iFactor = iTmp; } else { try { Access.MarketDateAccess.SupportMarket market = Access.EnumAccess.Parse <Access.MarketDateAccess.SupportMarket>(p); MarketAccess = new Access.MarketDateAccess(market); continue; } catch (Exception) { } Models.VariableParameter varParameter = Variables.Where(v => v.variable_key.Equals(p)).FirstOrDefault(); if (varParameter != null) { switch (varParameter.variable_key) { case "TODAY": varDate = targetDate; break; case "BBOM": varDate = MarketAccess.GetBusinessDayOfBeginningMonthWithOffset(targetDate, iFactor); break; case "NEXTBBOM": varDate = MarketAccess.GetBusinessDayOfNextBeginningMonthWithOffset(targetDate, iFactor); break; case "BOM": DateTime dtBOM = new DateTime(targetDate.Year, targetDate.Month, 1); varDate = dtBOM.AddDays(iFactor - 1); break; case "BEOM": varDate = MarketAccess.GetBusinessDayOfEndMonthWithOffset(targetDate, iFactor); break; case "NEXTBEOM": varDate = MarketAccess.GetBusinessDayOfNextEndMonthWithOffset(targetDate, iFactor); break; case "PREVBEOM": varDate = MarketAccess.GetBusinessDayOfPreviousEndMonthWithOffset(targetDate, iFactor); break; case "EOM": DateTime dtEOM = new DateTime(targetDate.Year + (targetDate.Month == 12 ? 1 : 0), targetDate.Month + (targetDate.Month == 12 ? -11 : 1), 1); varDate = dtEOM.AddDays(-iFactor); break; case "NEXTBUS": varDate = MarketAccess.GetBusinessDay(targetDate, iFactor); break; case "NEXTDAY": varDate = targetDate.AddDays(iFactor); break; case "PREVBUS": varDate = MarketAccess.GetBusinessDay(targetDate, -iFactor); break; case "PREVDAY": varDate = targetDate.AddDays(-iFactor); break; case "PARAMMASTER": vt = VariableType.ParamMaster; break; case "EOY": DateTime dtEOY = new DateTime(targetDate.Year + 1, 1, 1); varDate = dtEOY.AddDays(-iFactor); break; case "BEOY": varDate = MarketAccess.GetBusinessDayOfEndOfYear(targetDate, iFactor); break; case "BBOY": varDate = MarketAccess.GetBusinessDayOfBeginningOfYear(targetDate, iFactor); break; case "BOY": DateTime dtBOY = new DateTime(targetDate.Year, 1, 1); varDate = dtBOY.AddDays(iFactor - 1); break; } } else { switch (vt) { case VariableType.Date: if (varDate != null) { strBuf.Append(varDate.Value.ToString(p)); } else { strBuf.Append(p); } break; case VariableType.ParamMaster: strBuf.Append(Access.ParameterAccess.GetStringValue(p)); break; } } } } return(strBuf.ToString()); }
public VariableTranslator(Access.MarketDateAccess marketAccess) { MarketAccess = marketAccess; }