public ParseResult <Offset> ParsePartial(ValueCursor cursor) { int startIndex = cursor.Index; // TODO: Do better than this. It's horrible, and may well be invalid // for some cultures. Or just remove the NumberPattern from 2.0... int longestPossible = Math.Min(maxLength, cursor.Length - cursor.Index); for (int length = longestPossible; length >= 0; length--) { string candidate = cursor.Value.Substring(cursor.Index, length); int milliseconds; if (Int32.TryParse(candidate, NumberStyles.Integer | NumberStyles.AllowThousands, formatInfo.NumberFormat, out milliseconds)) { if (milliseconds < -NodaConstants.MillisecondsPerStandardDay || NodaConstants.MillisecondsPerStandardDay < milliseconds) { cursor.Move(startIndex); return(ParseResult <Offset> .ValueOutOfRange(cursor, milliseconds)); } cursor.Move(cursor.Index + length); return(ParseResult <Offset> .ForValue(Offset.FromMilliseconds(milliseconds))); } } cursor.Move(startIndex); return(ParseResult <Offset> .CannotParseValue(cursor, "n")); }
protected override ParseResult <Instant> ParseImpl(string value) { long number; if (Int64.TryParse(value, ParsingNumberStyles, FormatInfo.NumberFormat, out number)) { return(ParseResult <Instant> .ForValue(new Instant(number))); } return(ParseResult <Instant> .CannotParseValue(value, patternText)); }
public ParseResult <Offset> Parse(string text) { int milliseconds; if (Int32.TryParse(text, NumberStyles.Integer | NumberStyles.AllowThousands, formatInfo.NumberFormat, out milliseconds)) { if (milliseconds < -NodaConstants.MillisecondsPerStandardDay || NodaConstants.MillisecondsPerStandardDay < milliseconds) { return(ParseResult <Offset> .ValueOutOfRange(new ValueCursor(text), milliseconds)); } return(ParseResult <Offset> .ForValue(Offset.FromMilliseconds(milliseconds))); } return(ParseResult <Offset> .CannotParseValue(new ValueCursor(text), "n")); }