public static bool TryParse(string input, IFormatProvider formatProvider, DateTimeStyles styles, out DateTimeOffset result) { result = MinValue; styles = ValidateStyles(styles, nameof(styles)); var inputOffset = ParseOffset(input); if (inputOffset.HasValue || (styles & DateTimeStyles.AssumeUniversal) > 0) { styles |= DateTimeStyles.AdjustToUniversal; } DateTime dtParsed; if (!DateTime2.TryParse(input, DateTimeFormatInfo.GetInstance(formatProvider), styles, out dtParsed)) { return(false); } if (inputOffset.HasValue) { result = new DateTimeOffset(dtParsed, inputOffset.Value, false); } else { result = new DateTimeOffset(dtParsed); } return(true); }
public static bool TryParseExact(string input, string[] formats, IFormatProvider formatProvider, DateTimeStyles styles, out DateTimeOffset result) { if (formats == null) { throw new ArgumentNullException(nameof(formats)); } if (formats.Length == 0) { throw new FormatException("The list of formats cannot be empty"); } for (int i = 0; i < formats.Length; i++) { if (formats[i].Equals("u", StringComparison.Ordinal)) { formats[i] = UtcFormatString + "Z"; } else if (formats[i].Equals("r", StringComparison.OrdinalIgnoreCase)) { formats[i] = RUtcFormatString + "z"; int gmtIndex = input.Length - 4; if (input.IndexOf(" GMT") == gmtIndex) { input = string.Concat(input.Remove(gmtIndex), "+0"); } } } result = MinValue; styles = ValidateStyles(styles, nameof(styles)); var inputOffset = ParseOffset(input); if (inputOffset.HasValue || (styles & DateTimeStyles.AssumeUniversal) > 0) { styles |= DateTimeStyles.AdjustToUniversal; } DateTime dtParsed; if (!DateTime2.TryParseExact(input, formats, DateTimeFormatInfo.GetInstance(formatProvider), styles, out dtParsed)) { return(false); } if (inputOffset.HasValue) { result = new DateTimeOffset(dtParsed, inputOffset.Value, false); } else { result = new DateTimeOffset(dtParsed); } return(true); }