/// <summary> /// 创建ISO8601TimeInterval对象 /// </summary> /// <param name="start">开始时间</param> /// <param name="interval">时间段</param> /// <param name="end">结束时间</param> /// <param name="format">ISO8601TimeInterval格式</param> private ISO8601TimeInterval(DateTime start, TimeSpan interval, DateTime end, ISO8601TimeIntervalFormats format) { m_StartValue = start; m_IntervalValue = interval; m_EndValue = end; m_Format = format; }
/// <summary> /// 生成由正则表达式解析的数据 /// </summary> /// <param name="m">正则表达式解析类</param> /// <param name="format">ISO8601TimeInterval格式</param> /// <param name="start">所需要时间段的开始时间</param> /// <param name="end">所需要时间段的结束时间</param> /// <returns>时间段</returns> internal static TimeSpan Match2DateTime(Match m, ISO8601TimeIntervalFormats format, out DateTime start, out DateTime end) { TimeSpan interval = default(TimeSpan); switch (format) { case ISO8601TimeIntervalFormats.BasicDateByStartAndEndInSameYear: case ISO8601TimeIntervalFormats.ExtendedDateByStartAndEndInSameYear: start = new DateTime(Convert.ToInt32(m.Groups["year"].Value), Convert.ToInt32(m.Groups["startmonth"].Value), Convert.ToInt32(m.Groups["startday"].Value)); end = new DateTime(Convert.ToInt32(m.Groups["year"].Value), Convert.ToInt32(m.Groups["endmonth"].Value), Convert.ToInt32(m.Groups["endday"].Value)); interval = ISO8601TimeIntervalHelper.GetInterval(start, end); break; case ISO8601TimeIntervalFormats.BasicDateTimeByStartAndEnd: case ISO8601TimeIntervalFormats.ExtendedDateTimeByStartAndEnd: start = new DateTime ( Convert.ToInt32(m.Groups["startyear"].Value), Convert.ToInt32(m.Groups["startmonth"].Value), Convert.ToInt32(m.Groups["startday"].Value), Convert.ToInt32(m.Groups["starthour"].Value), Convert.ToInt32(m.Groups["startminute"].Value), Convert.ToInt32(m.Groups["startsecond"].Value) ); end = new DateTime ( Convert.ToInt32(m.Groups["endyear"].Value), Convert.ToInt32(m.Groups["endmonth"].Value), Convert.ToInt32(m.Groups["endday"].Value), Convert.ToInt32(m.Groups["endhour"].Value), Convert.ToInt32(m.Groups["endminute"].Value), Convert.ToInt32(m.Groups["endsecond"].Value) ); interval = ISO8601TimeIntervalHelper.GetInterval(start, end); break; case ISO8601TimeIntervalFormats.SymbolicDateTimeByDuration: case ISO8601TimeIntervalFormats.BasicDateTimeByDuration: case ISO8601TimeIntervalFormats.ExtendedDateTimeByDuration: interval = ISO8601TimeIntervalHelper.GetInterval ( m.Groups["year"].Value, m.Groups["month"].Value, m.Groups["day"].Value, m.Groups["hour"].Value, m.Groups["minute"].Value, m.Groups["second"].Value ); start = default(DateTime); end = default(DateTime); break; case ISO8601TimeIntervalFormats.BasicDateTimeByStartAndDuration: case ISO8601TimeIntervalFormats.ExtendedDateTimeByStartAndDuration: start = new DateTime ( Convert.ToInt32(m.Groups["startyear"].Value), Convert.ToInt32(m.Groups["startmonth"].Value), Convert.ToInt32(m.Groups["startday"].Value), Convert.ToInt32(m.Groups["starthour"].Value), Convert.ToInt32(m.Groups["startminute"].Value), Convert.ToInt32(m.Groups["startsecond"].Value) ); interval = ISO8601TimeIntervalHelper.GetInterval ( m.Groups["year"].Value, m.Groups["month"].Value, m.Groups["day"].Value, m.Groups["hour"].Value, m.Groups["minute"].Value, m.Groups["second"].Value ); end = ISO8601TimeIntervalHelper.GetEndDate(start, interval); break; case ISO8601TimeIntervalFormats.BasicDateTimeByDurationAndEnd: case ISO8601TimeIntervalFormats.ExtendedDateTimeByDurationAndEnd: interval = ISO8601TimeIntervalHelper.GetInterval ( m.Groups["year"].Value, m.Groups["month"].Value, m.Groups["day"].Value, m.Groups["hour"].Value, m.Groups["minute"].Value, m.Groups["second"].Value ); end = new DateTime ( Convert.ToInt32(m.Groups["endyear"].Value), Convert.ToInt32(m.Groups["endmonth"].Value), Convert.ToInt32(m.Groups["endday"].Value), Convert.ToInt32(m.Groups["endhour"].Value), Convert.ToInt32(m.Groups["endminute"].Value), Convert.ToInt32(m.Groups["endsecond"].Value) ); start = ISO8601TimeIntervalHelper.GetStartDate(interval, end); break; case ISO8601TimeIntervalFormats.ExtendedDateByDuration: interval = ISO8601TimeIntervalHelper.GetInterval ( m.Groups["year"].Value, m.Groups["month"].Value, m.Groups["day"].Value ); start = default(DateTime); end = default(DateTime); break; case ISO8601TimeIntervalFormats.SymbolicHourByDuration: interval = ISO8601TimeIntervalHelper.GetNewInterval ( m.Groups["hour"].Value, m.Groups["minute"].Value, m.Groups["second"].Value ); start = default(DateTime); end = default(DateTime); break; default: start = default(DateTime); end = default(DateTime); break; } return(interval); }
/// <summary> /// 创建ISO8601TimeInterval对象 /// </summary> /// <param name="start">开始时间</param> /// <param name="interval">时间段</param> /// <param name="format">ISO8601TimeInterval格式</param> public ISO8601TimeInterval(DateTime start, TimeSpan interval, ISO8601TimeIntervalFormats format) : this(start, interval, start.Subtract(-interval), format) { }
/// <summary> /// 创建ISO8601TimeInterval对象 /// </summary> /// <param name="start">开始时间</param> /// <param name="end">结束时间</param> /// <param name="format">ISO8601TimeInterval格式</param> public ISO8601TimeInterval(DateTime start, DateTime end, ISO8601TimeIntervalFormats format) : this(start, end.Subtract(start), end, format) { }
/// <summary> /// 创建ISO8601TimeInterval对象 /// </summary> /// <param name="interval">时间段</param> /// <param name="end">结束时间</param> /// <param name="format">ISO8601TimeInterval格式</param> public ISO8601TimeInterval(TimeSpan interval, DateTime end, ISO8601TimeIntervalFormats format) : this(end.Subtract(interval), interval, end, format) { }
/// <summary> /// 创建ISO8601TimeInterval对象 /// </summary> /// <param name="interval">时间段</param> /// <param name="format">ISO8601TimeInterval格式</param> public ISO8601TimeInterval(TimeSpan interval, ISO8601TimeIntervalFormats format) : this(DateTime.MinValue, interval, format) { }