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)); }
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); }
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); }
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); }
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); }