Пример #1
0
        /// <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);
        }
Пример #2
0
        /// <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));
    }