private static void HandleZoneAbbreviation(PatternCursor pattern,
                                            SteppedPatternBuilder <ZonedDateTime, ZonedDateTimeParseBucket> builder)
 {
     builder.AddField(PatternFields.ZoneAbbreviation, pattern.Current);
     builder.SetFormatOnly();
     builder.AddFormatAction((value, sb) => sb.Append(value.GetZoneInterval().Name));
 }
 private static void HandleZone(PatternCursor pattern,
                                SteppedPatternBuilder <ZonedDateTime, ZonedDateTimeParseBucket> builder)
 {
     builder.AddField(PatternFields.Zone, pattern.Current);
     builder.AddParseAction(ParseZone);
     builder.AddFormatAction((value, sb) => sb.Append(value.Zone.Id));
 }
        private static void HandleOffset(PatternCursor pattern,
                                         SteppedPatternBuilder <OffsetDateTime, OffsetDateTimeParseBucket> builder)
        {
            builder.AddField(PatternFields.EmbeddedOffset, pattern.Current);
            string embeddedPattern = pattern.GetEmbeddedPattern();
            var    offsetPattern   = OffsetPattern.Create(embeddedPattern, builder.FormatInfo).UnderlyingPattern;

            builder.AddEmbeddedPattern(offsetPattern, (bucket, offset) => bucket.Offset = offset, zdt => zdt.Offset);
        }
        private static void HandleOffset(PatternCursor pattern,
                                         SteppedPatternBuilder <OffsetDateTime, OffsetDateTimeParseBucket> builder)
        {
            builder.AddField(PatternFields.EmbeddedOffset, pattern.Current);
            string embeddedPattern = pattern.GetEmbeddedPattern('<', '>');
            var    offsetPattern   = OffsetPattern.Create(embeddedPattern, builder.FormatInfo).UnderlyingPattern;

            builder.AddParseAction((value, bucket) =>
            {
                var result = offsetPattern.ParsePartial(value);
                if (!result.Success)
                {
                    return(result.ConvertError <OffsetDateTime>());
                }
                bucket.Offset = result.Value;
                return(null);
            });
            builder.AddFormatAction((value, sb) => offsetPattern.AppendFormat(value.Offset, sb));
        }
예제 #5
0
        private static void HandleDayOfMonth(PatternCursor pattern, SteppedPatternBuilder <AnnualDate, AnnualDateParseBucket> builder)
        {
            int           count = pattern.GetRepeatCount(2);
            PatternFields field;

            switch (count)
            {
            case 1:
            case 2:
                field = PatternFields.DayOfMonth;
                // Handle real maximum value in the bucket
                builder.AddParseValueAction(count, 2, pattern.Current, 1, 99, (bucket, value) => bucket.DayOfMonth = value);
                builder.AddFormatLeftPad(count, value => value.Day, assumeNonNegative: true, assumeFitsInCount: count == 2);
                break;

            default:
                throw new InvalidOperationException("Invalid count!");
            }
            builder.AddField(field, pattern.Current);
        }
예제 #6
0
 private static void HandleMinus(PatternCursor pattern, SteppedPatternBuilder <Offset, OffsetParseBucket> builder)
 {
     builder.AddField(PatternFields.Sign, pattern.Current);
     builder.AddNegativeOnlySign((bucket, positive) => bucket.IsNegative = !positive, offset => offset.Milliseconds >= 0);
 }
예제 #7
0
 private static void HandleMinus(PatternCursor pattern, SteppedPatternBuilder <Duration, DurationParseBucket> builder)
 {
     builder.AddField(PatternFields.Sign, pattern.Current);
     builder.AddNegativeOnlySign((bucket, positive) => bucket.IsNegative = !positive, duration => duration.FloorDays >= 0);
 }
예제 #8
0
 private static void HandlePlus(PatternCursor pattern, SteppedPatternBuilder <Duration, DurationParseBucket> builder)
 {
     builder.AddField(PatternFields.Sign, pattern.Current);
     builder.AddRequiredSign((bucket, positive) => bucket.IsNegative = !positive, duration => duration.Ticks >= 0);
 }