Exemplo n.º 1
0
        public static string ToString(this TimeSpan thisValue, TimeUnit input, byte millisecondsLength = 3, bool millisecondsAreOptional = false)
        {
            StringBuilder sb = new StringBuilder(16);

            millisecondsLength = millisecondsLength.Within((byte)0, (byte)7);

            switch (input)
            {
            case TimeUnit.None:
                break;

            case TimeUnit.Millisecond:
                if (millisecondsLength > 0)
                {
                    char   f  = millisecondsAreOptional ? 'F' : 'f';
                    string fs = new string(f, millisecondsLength);
                    sb.Append(fs);
                }
                break;

            case TimeUnit.Second:
                sb.Append("ss");
                break;

            case TimeUnit.Minute:
                sb.Append("mm");
                break;

            case TimeUnit.Hour:
                sb.Append("hh");
                break;

            case TimeUnit.Day:
                sb.Append("dd");
                break;

            case TimeUnit.Hour | TimeUnit.Minute:
                sb.Append(HOURS_MINUTES);
                break;

            case TimeUnit.Day | TimeUnit.Hour | TimeUnit.Minute:
                sb.Append(DAYS_HOURS_MINUTES);
                break;

            case TimeUnit.Hour | TimeUnit.Minute | TimeUnit.Second:
                sb.Append(HOURS_MINUTES_SECONDS);
                break;

            case TimeUnit.Day | TimeUnit.Hour | TimeUnit.Minute | TimeUnit.Second:
                sb.Append(DAYS_HOURS_MINUTES_SECONDS);
                break;

            case TimeUnit.Hour | TimeUnit.Minute | TimeUnit.Second | TimeUnit.Millisecond:
                sb.Append(HOURS_MINUTES_SECONDS);

                if (millisecondsLength > 0)
                {
                    char   f  = millisecondsAreOptional ? 'F' : 'f';
                    string fs = new string(f, millisecondsLength);
                    sb.Append(DOT_SEP);
                    sb.Append(fs);
                }
                break;

            case TimeUnit.Day | TimeUnit.Hour | TimeUnit.Minute | TimeUnit.Second | TimeUnit.Millisecond:
                sb.Append(DAYS_HOURS_MINUTES_SECONDS);

                if (millisecondsLength > 0)
                {
                    char   f  = millisecondsAreOptional ? 'F' : 'f';
                    string fs = new string(f, millisecondsLength);
                    sb.Append(DOT_SEP);
                    sb.Append(fs);
                }
                break;

            default:
                string separator = COL_SEP;

                if (input.FastHasFlag(TimeUnit.Day))
                {
                    sb.Append('d');
                    separator = DOT_SEP;
                }

                if (input.FastHasFlag(TimeUnit.Hour))
                {
                    if (sb.Length > 0)
                    {
                        sb.Append(separator);
                        separator = COL_SEP;
                    }

                    sb.Append("hh");
                }

                if (input.FastHasFlag(TimeUnit.Minute))
                {
                    if (sb.Length > 0)
                    {
                        sb.Append(separator);
                        separator = COL_SEP;
                    }

                    sb.Append("mm");
                }

                if (input.FastHasFlag(TimeUnit.Second))
                {
                    if (sb.Length > 0)
                    {
                        sb.Append(separator);
                    }
                    sb.Append("ss");
                }

                if (input.FastHasFlag(TimeUnit.Millisecond))
                {
                    if (millisecondsLength > 0)
                    {
                        char   f  = millisecondsAreOptional ? 'F' : 'f';
                        string fs = new string(f, millisecondsLength);
                        if (sb.Length > 0)
                        {
                            sb.Append(DOT_SEP);
                        }
                        sb.Append(fs);
                    }
                }
                break;
            }

            if (sb.Length == 1)
            {
                sb.Insert(0, '%');
            }
            return(thisValue.ToString(sb.ToString()));
        }