/// <summary> /// 执行函数,如果异常,返回默认值。 /// 解决 def 为 null 二义性问题 /// </summary> /// <param name="exp"></param> /// <param name="def"></param> /// <returns></returns> public MyDate TryEvaluate_MyDate(string exp, MyDate def) { try { if (Parse(exp)) { var obj = Evaluate(); obj = obj.ToMyDate("It can't be converted to MyDate!"); if (obj.IsError) { LastError = obj.ErrorMsg; return(def); } return(obj.DateValue); } } catch (Exception ex) { LastError = ex.Message; } return(def); }
/// <summary> /// 创建操作数 /// </summary> /// <param name="obj"></param> /// <returns></returns> public static Operand Create(MyDate obj) { return(new OperandMyDate(obj)); }
/// <summary> /// 添加自定义参数 /// </summary> /// <param name="key"></param> /// <param name="obj"></param> public void AddParameter(string key, MyDate obj) { _dict[key] = Operand.Create(obj); }
/// <summary> /// 字符串转MyDate /// </summary> /// <param name="txt"></param> /// <returns></returns> public static MyDate Parse(String txt) { String t = txt.Trim(); var m = Regex.Match(t, "^(\\d{4})-(11|12|0?\\d)-(30|31|[012]?\\d) ([01]\\d?|2[1234]):([012345]?\\d):([012345]?\\d)$", RegexOptions.Compiled); if (m.Success) { MyDate date = new MyDate(); date.Year = int.Parse(m.Groups[(1)].Value); date.Month = int.Parse(m.Groups[(2)].Value); date.Day = int.Parse(m.Groups[(3)].Value); date.Hour = int.Parse(m.Groups[(4)].Value); date.Minute = int.Parse(m.Groups[(5)].Value); date.Second = int.Parse(m.Groups[(6)].Value); return(date); } m = Regex.Match(t, "^(\\d{4})-(11|12|0?\\d)-(30|31|[012]?\\d) ([01]\\d?|2[1234]):([012345]?\\d)$", RegexOptions.Compiled); if (m.Success) { MyDate date = new MyDate(); date.Year = int.Parse(m.Groups[(1)].Value); date.Month = int.Parse(m.Groups[(2)].Value); date.Day = int.Parse(m.Groups[(3)].Value); date.Hour = int.Parse(m.Groups[(4)].Value); date.Minute = int.Parse(m.Groups[(5)].Value); return(date); } m = Regex.Match(t, "^(\\d{4})-(11|12|0?\\d)-(30|31|[012]?\\d)$"); if (m.Success) { MyDate date = new MyDate(); date.Year = int.Parse(m.Groups[(1)].Value); date.Month = int.Parse(m.Groups[(2)].Value); date.Day = int.Parse(m.Groups[(3)].Value); return(date); } m = Regex.Match(t, "^(\\d+) (2[1234]|[01]?\\d):([012345]?\\d):([012345]?\\d)$", RegexOptions.Compiled); if (m.Success) { MyDate date = new MyDate(); date.Day = int.Parse(m.Groups[(1)].Value); date.Hour = int.Parse(m.Groups[(2)].Value); date.Minute = int.Parse(m.Groups[(3)].Value); date.Second = int.Parse(m.Groups[(4)].Value); return(date); } m = Regex.Match(t, "^(2[1234]|[01]?\\d):([012345]?\\d):([012345]?\\d)$", RegexOptions.Compiled); if (m.Success) { MyDate date = new MyDate(); date.Hour = int.Parse(m.Groups[(1)].Value); date.Minute = int.Parse(m.Groups[(2)].Value); date.Second = int.Parse(m.Groups[(3)].Value); return(date); } m = Regex.Match(t, "^(2[1234]|[01]?\\d):([012345]?\\d)$", RegexOptions.Compiled); if (m.Success) { MyDate date = new MyDate(); date.Hour = int.Parse(m.Groups[(1)].Value); date.Minute = int.Parse(m.Groups[(2)].Value); return(date); } return(null); }