public static Period Parse(string str)
        {
            Match match = ParseRegex.Match(str);
            if (!match.Success)
                throw new ArgumentException();

            Period result = new Period();
            string dayofweekStr = match.Groups[1].ToString();
            result.DayOfWeek = dayofweekStr == "" ? 0 : int.Parse(dayofweekStr);
            string timeStr = match.Groups[2].ToString();
            result.Time = timeStr == "" ? 0 : int.Parse(timeStr);
            result.WeekStr = match.Groups[3].ToString();
            result.Week = ParseWeek(result.WeekStr);

            return result;
        }
        public bool ConflictWith(Period other)
        {
            if (DayOfWeek == 0 || other.DayOfWeek == 0)
                return false;

            return DayOfWeek == other.DayOfWeek && Time == other.Time && (Week & other.Week) != 0;
        }