/// <summary> /// Attempts to parse a UTC offset. /// </summary> /// <param name="input">The string to parse.</param> /// <param name="offset">The offset that was parsed if parsing was successful.</param> /// <returns>Whether or not parsing was successful.</returns> public static bool TryParseOffset(string input, out Offset offset) { var parseResult = OffsetPattern.GeneralInvariantWithZ.Parse(input); if (parseResult.Success) { offset = parseResult.Value; return(true); } parseResult = NoSignPattern.Parse(input); if (parseResult.Success) { offset = parseResult.Value; return(true); } parseResult = NoTimeSeparatorPattern.Parse(input); if (parseResult.Success) { offset = parseResult.Value; return(true); } offset = default; return(false); }
/// <inheritdoc /> public override object ConvertFromString(string text, IReaderRow row, MemberMapData memberMapData) { if (text == null) { // ReSharper disable once ExpressionIsAlwaysNull - throws an error return(base.ConvertFromString(text, row, memberMapData)); } return(OffsetPattern.Parse(text).Value); }
static ZonedDateTime Parse(string text) { int gmtIndex = text.IndexOf(" GMT"); int zoneIndex = text.IndexOf(" ("); // TODO: Validation that these aren't -1 :) string localText = text.Substring(0, gmtIndex); string offsetText = text.Substring(gmtIndex, zoneIndex - gmtIndex); var localResult = LocalPattern.Parse(localText); var offsetResult = OffsetPattern.Parse(offsetText); // TODO: Validate that both are successful var fixedZone = DateTimeZone.ForOffset(offsetResult.Value); return(localResult.Value.InZoneStrictly(fixedZone)); }