System.DateTimeUtils.CountRepeat C# (CSharp) Method

CountRepeat() public static method

public static CountRepeat ( string fmt, int p, char c ) : int
fmt string
p int
c char
return int
		public static int CountRepeat (string fmt, int p, char c)
		{
			int l = fmt.Length;
			int i = p + 1;
			while ((i < l) && (fmt [i] == c)) 
				i++;
			
			return i - p;
		}

Usage Example

Beispiel #1
0
        public static string ToString(DateTime dt, TimeSpan?utc_offset, string format, DateTimeFormatInfo dfi)
        {
            StringBuilder      stringBuilder = new StringBuilder(format.Length + 10);
            DateTimeFormatInfo invariantInfo = DateTimeFormatInfo.InvariantInfo;

            if (format == invariantInfo.RFC1123Pattern)
            {
                dfi = invariantInfo;
            }
            else if (format == invariantInfo.UniversalSortableDateTimePattern)
            {
                dfi = invariantInfo;
            }
            int i = 0;

            while (i < format.Length)
            {
                bool flag = false;
                char c    = format[i];
                char c2   = c;
                int  num;
                switch (c2)
                {
                case 'd':
                    num = DateTimeUtils.CountRepeat(format, i, c);
                    if (num <= 2)
                    {
                        DateTimeUtils.ZeroPad(stringBuilder, dfi.Calendar.GetDayOfMonth(dt), (num != 1) ? 2 : 1);
                    }
                    else if (num == 3)
                    {
                        stringBuilder.Append(dfi.GetAbbreviatedDayName(dfi.Calendar.GetDayOfWeek(dt)));
                    }
                    else
                    {
                        stringBuilder.Append(dfi.GetDayName(dfi.Calendar.GetDayOfWeek(dt)));
                    }
                    break;

                default:
                    switch (c2)
                    {
                    case 'F':
                        flag = true;
                        goto IL_1E3;

                    default:
                        switch (c2)
                        {
                        case 's':
                            num = DateTimeUtils.CountRepeat(format, i, c);
                            DateTimeUtils.ZeroPad(stringBuilder, dt.Second, (num != 1) ? 2 : 1);
                            break;

                        case 't':
                        {
                            num = DateTimeUtils.CountRepeat(format, i, c);
                            string text = (dt.Hour >= 12) ? dfi.PMDesignator : dfi.AMDesignator;
                            if (num == 1)
                            {
                                if (text.Length >= 1)
                                {
                                    stringBuilder.Append(text[0]);
                                }
                            }
                            else
                            {
                                stringBuilder.Append(text);
                            }
                            break;
                        }

                        default:
                            switch (c2)
                            {
                            case '"':
                            case '\'':
                                num = DateTimeUtils.ParseQuotedString(format, i, stringBuilder);
                                break;

                            default:
                                if (c2 != '/')
                                {
                                    if (c2 != ':')
                                    {
                                        if (c2 != '\\')
                                        {
                                            stringBuilder.Append(c);
                                            num = 1;
                                        }
                                        else
                                        {
                                            if (i >= format.Length - 1)
                                            {
                                                throw new FormatException("\\ at end of date time string");
                                            }
                                            stringBuilder.Append(format[i + 1]);
                                            num = 2;
                                        }
                                    }
                                    else
                                    {
                                        stringBuilder.Append(dfi.TimeSeparator);
                                        num = 1;
                                    }
                                }
                                else
                                {
                                    stringBuilder.Append(dfi.DateSeparator);
                                    num = 1;
                                }
                                break;

                            case '%':
                                if (i >= format.Length - 1)
                                {
                                    throw new FormatException("% at end of date time string");
                                }
                                if (format[i + 1] == '%')
                                {
                                    throw new FormatException("%% in date string");
                                }
                                num = 1;
                                break;
                            }
                            break;

                        case 'y':
                            num = DateTimeUtils.CountRepeat(format, i, c);
                            if (num <= 2)
                            {
                                DateTimeUtils.ZeroPad(stringBuilder, dfi.Calendar.GetYear(dt) % 100, num);
                            }
                            else
                            {
                                DateTimeUtils.ZeroPad(stringBuilder, dfi.Calendar.GetYear(dt), num);
                            }
                            break;

                        case 'z':
                        {
                            num = DateTimeUtils.CountRepeat(format, i, c);
                            TimeSpan timeSpan = (utc_offset == null) ? TimeZone.CurrentTimeZone.GetUtcOffset(dt) : utc_offset.Value;
                            if (timeSpan.Ticks >= 0L)
                            {
                                stringBuilder.Append('+');
                            }
                            else
                            {
                                stringBuilder.Append('-');
                            }
                            int num2 = num;
                            if (num2 != 1)
                            {
                                if (num2 != 2)
                                {
                                    stringBuilder.Append(Math.Abs(timeSpan.Hours).ToString("00"));
                                    stringBuilder.Append(':');
                                    stringBuilder.Append(Math.Abs(timeSpan.Minutes).ToString("00"));
                                }
                                else
                                {
                                    stringBuilder.Append(Math.Abs(timeSpan.Hours).ToString("00"));
                                }
                            }
                            else
                            {
                                stringBuilder.Append(Math.Abs(timeSpan.Hours));
                            }
                            break;
                        }
                        }
                        break;

                    case 'H':
                        num = DateTimeUtils.CountRepeat(format, i, c);
                        DateTimeUtils.ZeroPad(stringBuilder, dt.Hour, (num != 1) ? 2 : 1);
                        break;

                    case 'K':
                        num = 1;
                        if (utc_offset != null || dt.Kind == DateTimeKind.Local)
                        {
                            TimeSpan timeSpan = (utc_offset == null) ? TimeZone.CurrentTimeZone.GetUtcOffset(dt) : utc_offset.Value;
                            if (timeSpan.Ticks >= 0L)
                            {
                                stringBuilder.Append('+');
                            }
                            else
                            {
                                stringBuilder.Append('-');
                            }
                            stringBuilder.Append(Math.Abs(timeSpan.Hours).ToString("00"));
                            stringBuilder.Append(':');
                            stringBuilder.Append(Math.Abs(timeSpan.Minutes).ToString("00"));
                        }
                        else if (dt.Kind == DateTimeKind.Utc)
                        {
                            stringBuilder.Append('Z');
                        }
                        break;

                    case 'M':
                    {
                        num = DateTimeUtils.CountRepeat(format, i, c);
                        int month = dfi.Calendar.GetMonth(dt);
                        if (num <= 2)
                        {
                            DateTimeUtils.ZeroPad(stringBuilder, month, num);
                        }
                        else if (num == 3)
                        {
                            stringBuilder.Append(dfi.GetAbbreviatedMonthName(month));
                        }
                        else
                        {
                            stringBuilder.Append(dfi.GetMonthName(month));
                        }
                        break;
                    }
                    }
                    break;

                case 'f':
                    goto IL_1E3;

                case 'g':
                    num = DateTimeUtils.CountRepeat(format, i, c);
                    stringBuilder.Append(dfi.GetEraName(dfi.Calendar.GetEra(dt)));
                    break;

                case 'h':
                {
                    num = DateTimeUtils.CountRepeat(format, i, c);
                    int num3 = dt.Hour % 12;
                    if (num3 == 0)
                    {
                        num3 = 12;
                    }
                    DateTimeUtils.ZeroPad(stringBuilder, num3, (num != 1) ? 2 : 1);
                    break;
                }

                case 'm':
                    num = DateTimeUtils.CountRepeat(format, i, c);
                    DateTimeUtils.ZeroPad(stringBuilder, dt.Minute, (num != 1) ? 2 : 1);
                    break;
                }
IL_6C6:
                i += num;
                continue;
IL_1E3:
                num = DateTimeUtils.CountRepeat(format, i, c);
                if (num > 7)
                {
                    throw new FormatException("Invalid Format String");
                }
                int num4   = (int)(dt.Ticks % 10000000L / (long)Math.Pow(10.0, (double)(7 - num)));
                int length = stringBuilder.Length;
                DateTimeUtils.ZeroPad(stringBuilder, num4, num);
                if (flag)
                {
                    while (stringBuilder.Length > length && stringBuilder[stringBuilder.Length - 1] == '0')
                    {
                        stringBuilder.Length--;
                    }
                    if (num4 == 0 && length > 0 && stringBuilder[length - 1] == '.')
                    {
                        stringBuilder.Length--;
                    }
                }
                goto IL_6C6;
            }
            return(stringBuilder.ToString());
        }
All Usage Examples Of System.DateTimeUtils::CountRepeat