Exemplo n.º 1
0
        /// <summary>
        /// 將日期當作是「西元」年處理。
        /// </summary>
        /// <param name="dtString">日期字串。 </param>
        /// <param name="method">如果日期缺少的欄位用何種方式補上。</param>
        /// <returns></returns>
        public static DateTime? ParseGregorian(string dtString, PaddingMethod method)
        {
            PatternMatcher matcher = new PatternMatcher(dtString.Trim());

            if (!matcher.IsSuccess)
                return null;
            else
            {
                string assembly;

                if (method == PaddingMethod.None)
                {
                    foreach (Group each in matcher.EachGroup())
                        if (!each.Success) return null;

                    assembly = matcher.GetReassemblyString();
                }
                else
                {
                    int year, month, day, hour, minute, second;
                    DateTimePaddingInfo padding = new DateTimePaddingInfo(method);

                    ExtractInfo(matcher, padding, out year, out month, out day, out hour, out minute, out second);

                    assembly = year + "/" + month + "/" + day + " " + hour + ":" + minute + ":" + second;
                }

                DateTime result;
                if (DateTime.TryParse(assembly, DateTimeFormatInfo.InvariantInfo, DateTimeStyles.None, out result))
                    return result;
                else
                    return null;
            }
        }
Exemplo n.º 2
0
        private static void ExtractInfo(PatternMatcher matcher, DateTimePaddingInfo padding, out int year, out int month, out int day, out int hour, out int minute, out int second)
        {
            if (matcher.ContainField(DateTimeField.Year))
                year = matcher.GetFieldValue(DateTimeField.Year);
            else
                year = padding.GetYear();

            if (matcher.ContainField(DateTimeField.Month))
                month = matcher.GetFieldValue(DateTimeField.Month);
            else
                month = padding.GetMonth();

            if (matcher.ContainField(DateTimeField.Day))
                day = matcher.GetFieldValue(DateTimeField.Day);
            else
                day = padding.GetDay(year, month);

            if (matcher.ContainField(DateTimeField.Hour))
                hour = matcher.GetFieldValue(DateTimeField.Hour);
            else
                hour = padding.GetHour();

            if (matcher.ContainField(DateTimeField.Minute))
                minute = matcher.GetFieldValue(DateTimeField.Minute);
            else
                minute = padding.GetMinute();

            if (matcher.ContainField(DateTimeField.Second))
                second = matcher.GetFieldValue(DateTimeField.Second);
            else
                second = padding.GetSecond();
        }