Exemple #1
0
 /// <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);
 }
Exemple #2
0
 /// <summary>
 /// 创建操作数
 /// </summary>
 /// <param name="obj"></param>
 /// <returns></returns>
 public static Operand Create(MyDate obj)
 {
     return(new OperandMyDate(obj));
 }
Exemple #3
0
 /// <summary>
 /// 添加自定义参数
 /// </summary>
 /// <param name="key"></param>
 /// <param name="obj"></param>
 public void AddParameter(string key, MyDate obj)
 {
     _dict[key] = Operand.Create(obj);
 }
Exemple #4
0
        /// <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);
        }