static private EnsureDateTime ( System.DateTime value, DateTimeZoneHandling timeZone ) : System.DateTime | ||
value | System.DateTime | |
timeZone | DateTimeZoneHandling | |
Résultat | System.DateTime |
internal static bool TryParseDateTime(string s, DateTimeZoneHandling dateTimeZoneHandling, string dateFormatString, CultureInfo culture, out DateTime dt) { if (s.Length > 0) { if (s[0] == '/') { if (s.Length >= 9 && s.StartsWith("/Date(", StringComparison.Ordinal) && s.EndsWith(")/", StringComparison.Ordinal) && DateTimeUtils.TryParseDateTimeMicrosoft(new StringReference(s.ToCharArray(), 0, s.Length), dateTimeZoneHandling, out dt)) { return(true); } } else if (s.Length >= 19 && s.Length <= 40 && char.IsDigit(s[0]) && s[10] == 'T' && DateTime.TryParseExact(s, "yyyy-MM-ddTHH:mm:ss.FFFFFFFK", CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind, out dt)) { dt = DateTimeUtils.EnsureDateTime(dt, dateTimeZoneHandling); return(true); } if (!string.IsNullOrEmpty(dateFormatString) && DateTimeUtils.TryParseDateTimeExact(s, dateTimeZoneHandling, dateFormatString, culture, out dt)) { return(true); } } dt = new DateTime(); return(false); }
internal static bool TryParseDateIso(string text, DateParseHandling dateParseHandling, DateTimeZoneHandling dateTimeZoneHandling, out object dt) { DateTimeParser dateTimeParser = default(DateTimeParser); if (!dateTimeParser.Parse(text)) { dt = null; return(false); } DateTime dateTime = new DateTime(dateTimeParser.Year, dateTimeParser.Month, dateTimeParser.Day, dateTimeParser.Hour, dateTimeParser.Minute, dateTimeParser.Second); dateTime = dateTime.AddTicks((long)dateTimeParser.Fraction); if (dateParseHandling != DateParseHandling.DateTimeOffset) { switch (dateTimeParser.Zone) { case ParserTimeZone.Utc: dateTime = new DateTime(dateTime.Ticks, DateTimeKind.Utc); break; case ParserTimeZone.LocalWestOfUtc: { TimeSpan timeSpan = new TimeSpan(dateTimeParser.ZoneHour, dateTimeParser.ZoneMinute, 0); long num = dateTime.Ticks + timeSpan.Ticks; if (num <= DateTime.MaxValue.Ticks) { dateTime = new DateTime(num, DateTimeKind.Utc).ToLocalTime(); } else { num += dateTime.GetUtcOffset().Ticks; if (num > DateTime.MaxValue.Ticks) { num = DateTime.MaxValue.Ticks; } dateTime = new DateTime(num, DateTimeKind.Local); } break; } case ParserTimeZone.LocalEastOfUtc: { TimeSpan timeSpan2 = new TimeSpan(dateTimeParser.ZoneHour, dateTimeParser.ZoneMinute, 0); long num = dateTime.Ticks - timeSpan2.Ticks; if (num >= DateTime.MinValue.Ticks) { dateTime = new DateTime(num, DateTimeKind.Utc).ToLocalTime(); } else { num += dateTime.GetUtcOffset().Ticks; if (num < DateTime.MinValue.Ticks) { num = DateTime.MinValue.Ticks; } dateTime = new DateTime(num, DateTimeKind.Local); } break; } } dt = DateTimeUtils.EnsureDateTime(dateTime, dateTimeZoneHandling); return(true); } TimeSpan utcOffset; switch (dateTimeParser.Zone) { case ParserTimeZone.Utc: utcOffset = new TimeSpan(0L); break; case ParserTimeZone.LocalWestOfUtc: utcOffset = new TimeSpan(-dateTimeParser.ZoneHour, -dateTimeParser.ZoneMinute, 0); break; case ParserTimeZone.LocalEastOfUtc: utcOffset = new TimeSpan(dateTimeParser.ZoneHour, dateTimeParser.ZoneMinute, 0); break; default: utcOffset = TimeZoneInfo.Local.GetUtcOffset(dateTime); break; } long num2 = dateTime.Ticks - utcOffset.Ticks; if (num2 < 0L || num2 > 3155378975999999999L) { dt = null; return(false); } dt = new DateTimeOffset(dateTime, utcOffset); return(true); }
internal static bool TryParseDateTimeIso(StringReference text, DateTimeZoneHandling dateTimeZoneHandling, out DateTime dt) { long ticks; TimeSpan utcOffset; DateTimeParser dateTimeParser = new DateTimeParser(); if (!dateTimeParser.Parse(text.Chars, text.StartIndex, text.Length)) { dt = new DateTime(); return(false); } DateTime dateTime = DateTimeUtils.CreateDateTime(dateTimeParser); switch (dateTimeParser.Zone) { case ParserTimeZone.Utc: { dateTime = new DateTime(dateTime.Ticks, DateTimeKind.Utc); break; } case ParserTimeZone.LocalWestOfUtc: { TimeSpan timeSpan = new TimeSpan(dateTimeParser.ZoneHour, dateTimeParser.ZoneMinute, 0); ticks = dateTime.Ticks + timeSpan.Ticks; if (ticks > DateTime.MaxValue.Ticks) { utcOffset = dateTime.GetUtcOffset(); ticks += utcOffset.Ticks; if (ticks > DateTime.MaxValue.Ticks) { ticks = DateTime.MaxValue.Ticks; } dateTime = new DateTime(ticks, DateTimeKind.Local); break; } else { dateTime = (new DateTime(ticks, DateTimeKind.Utc)).ToLocalTime(); break; } } case ParserTimeZone.LocalEastOfUtc: { TimeSpan timeSpan1 = new TimeSpan(dateTimeParser.ZoneHour, dateTimeParser.ZoneMinute, 0); ticks = dateTime.Ticks - timeSpan1.Ticks; if (ticks < DateTime.MinValue.Ticks) { utcOffset = dateTime.GetUtcOffset(); ticks += utcOffset.Ticks; if (ticks < DateTime.MinValue.Ticks) { ticks = DateTime.MinValue.Ticks; } dateTime = new DateTime(ticks, DateTimeKind.Local); break; } else { dateTime = (new DateTime(ticks, DateTimeKind.Utc)).ToLocalTime(); break; } } } dt = DateTimeUtils.EnsureDateTime(dateTime, dateTimeZoneHandling); return(true); }