Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ FormatCustomized()

static StringBuilder System.Globalization.TimeSpanFormat.FormatCustomized ( TimeSpan value,
ReadOnlySpan< char > format,
DateTimeFormatInfo dtfi,
StringBuilder result = null )
inlinestaticprivate

Definition at line 410 of file TimeSpanFormat.cs.

411 {
412 bool flag = false;
413 if (result == null)
414 {
415 result = StringBuilderCache.Acquire();
416 flag = true;
417 }
418 int num = (int)(value.Ticks / 864000000000L);
419 long num2 = value.Ticks % 864000000000L;
420 if (value.Ticks < 0)
421 {
422 num = -num;
423 num2 = -num2;
424 }
425 int value2 = (int)(num2 / 36000000000L % 24);
426 int value3 = (int)(num2 / 600000000 % 60);
427 int value4 = (int)(num2 / 10000000 % 60);
428 int num3 = (int)(num2 % 10000000);
429 long num4 = 0L;
430 int num6;
431 for (int i = 0; i < format.Length; i += num6)
432 {
433 char c = format[i];
434 switch (c)
435 {
436 case 'h':
437 num6 = DateTimeFormat.ParseRepeatPattern(format, i, c);
438 if (num6 <= 2)
439 {
440 DateTimeFormat.FormatDigits(result, value2, num6);
441 continue;
442 }
443 break;
444 case 'm':
445 num6 = DateTimeFormat.ParseRepeatPattern(format, i, c);
446 if (num6 <= 2)
447 {
448 DateTimeFormat.FormatDigits(result, value3, num6);
449 continue;
450 }
451 break;
452 case 's':
453 num6 = DateTimeFormat.ParseRepeatPattern(format, i, c);
454 if (num6 <= 2)
455 {
456 DateTimeFormat.FormatDigits(result, value4, num6);
457 continue;
458 }
459 break;
460 case 'f':
461 num6 = DateTimeFormat.ParseRepeatPattern(format, i, c);
462 if (num6 <= 7)
463 {
464 num4 = num3;
465 num4 /= TimeSpanParse.Pow10(7 - num6);
466 result.AppendSpanFormattable(num4, DateTimeFormat.fixedNumberFormats[num6 - 1], CultureInfo.InvariantCulture);
467 continue;
468 }
469 break;
470 case 'F':
471 num6 = DateTimeFormat.ParseRepeatPattern(format, i, c);
472 if (num6 <= 7)
473 {
474 num4 = num3;
475 num4 /= TimeSpanParse.Pow10(7 - num6);
476 int num7 = num6;
477 while (num7 > 0 && num4 % 10 == 0L)
478 {
479 num4 /= 10;
480 num7--;
481 }
482 if (num7 > 0)
483 {
484 result.AppendSpanFormattable(num4, DateTimeFormat.fixedNumberFormats[num7 - 1], CultureInfo.InvariantCulture);
485 }
486 continue;
487 }
488 break;
489 case 'd':
490 num6 = DateTimeFormat.ParseRepeatPattern(format, i, c);
491 if (num6 <= 8)
492 {
493 DateTimeFormat.FormatDigits(result, num, num6, overrideLengthLimit: true);
494 continue;
495 }
496 break;
497 case '"':
498 case '\'':
499 num6 = DateTimeFormat.ParseQuoteString(format, i, result);
500 continue;
501 case '%':
502 {
503 int num5 = DateTimeFormat.ParseNextChar(format, i);
504 if (num5 >= 0 && num5 != 37)
505 {
506 char reference = (char)num5;
507 StringBuilder stringBuilder = FormatCustomized(value, MemoryMarshal.CreateReadOnlySpan(ref reference, 1), dtfi, result);
508 num6 = 2;
509 continue;
510 }
511 break;
512 }
513 case '\\':
514 {
515 int num5 = DateTimeFormat.ParseNextChar(format, i);
516 if (num5 >= 0)
517 {
518 result.Append((char)num5);
519 num6 = 2;
520 continue;
521 }
522 break;
523 }
524 }
525 if (flag)
526 {
528 }
529 throw new FormatException(SR.Format_InvalidString);
530 }
531 return result;
532 }
static StringBuilder FormatCustomized(TimeSpan value, ReadOnlySpan< char > format, DateTimeFormatInfo dtfi, StringBuilder result=null)
static void Release(StringBuilder sb)
static StringBuilder Acquire(int capacity=16)
StringBuilder Append(char value, int repeatCount)

References System.Text.StringBuilderCache.Acquire(), System.DateTimeFormat.fixedNumberFormats, System.format, System.SR.Format_InvalidString, System.Globalization.TimeSpanFormat.FormatCustomized(), System.DateTimeFormat.FormatDigits(), System.Globalization.CultureInfo.InvariantCulture, System.L, System.DateTimeFormat.ParseNextChar(), System.DateTimeFormat.ParseQuoteString(), System.DateTimeFormat.ParseRepeatPattern(), System.Globalization.TimeSpanParse.Pow10(), System.Text.StringBuilderCache.Release(), and System.value.

Referenced by System.Globalization.TimeSpanFormat.Format(), System.Globalization.TimeSpanFormat.FormatCustomized(), and System.Globalization.TimeSpanFormat.TryFormat().