private static DateTime SwitchToUtcTime(DateTime value, UnspecifiedDateTimeHandling dateTimeHandling) { switch (value.Kind) { case DateTimeKind.Unspecified: if (dateTimeHandling == UnspecifiedDateTimeHandling.AssumeUtc) { return(new DateTime(value.Ticks, DateTimeKind.Utc)); } else { return(new DateTime(value.Ticks, DateTimeKind.Local).ToUniversalTime()); } case DateTimeKind.Utc: return(value); case DateTimeKind.Local: return(value.ToUniversalTime()); } return(value); }
public static DateTime EnsureDateTime(DateTime value, TimeZoneInfo timeZone, DateTimeHandling dateTimeHandling, UnspecifiedDateTimeHandling unspecifiedDateTimeHandling) { if (dateTimeHandling == DateTimeHandling.Utc) { if (timeZone == null) { return(SwitchToUtcTime(value, unspecifiedDateTimeHandling)); } return(SwitchToUtcTime(value, timeZone, unspecifiedDateTimeHandling)); } else if (dateTimeHandling == DateTimeHandling.Local) { if (timeZone == null) { return(SwitchToLocalTime(value, unspecifiedDateTimeHandling)); } return(SwitchToLocalTime(value, timeZone, unspecifiedDateTimeHandling)); } else if (dateTimeHandling == DateTimeHandling.Current) { if (value.Kind == DateTimeKind.Utc) { return(EnsureDateTime(value, timeZone, DateTimeHandling.Utc, unspecifiedDateTimeHandling)); } else if (value.Kind == DateTimeKind.Local) { return(EnsureDateTime(value, timeZone, DateTimeHandling.Local, unspecifiedDateTimeHandling)); } else { if (unspecifiedDateTimeHandling == UnspecifiedDateTimeHandling.AssumeUtc) { return(EnsureDateTime(value, timeZone, DateTimeHandling.Utc, unspecifiedDateTimeHandling)); } else if (unspecifiedDateTimeHandling == UnspecifiedDateTimeHandling.AssumeLocal) { return(EnsureDateTime(value, timeZone, DateTimeHandling.Local, unspecifiedDateTimeHandling)); } else { ThrowUnsupportedOption(unspecifiedDateTimeHandling.ToString()); return(value); } } } else { ThrowUnsupportedOption(dateTimeHandling.ToString()); return(value); } }
private static DateTime SwitchToLocalTime(DateTime value, TimeZoneInfo timeZone, UnspecifiedDateTimeHandling dateTimeHandling) { switch (value.Kind) { case DateTimeKind.Unspecified: if (dateTimeHandling == UnspecifiedDateTimeHandling.AssumeLocal) { return(string.Equals(timeZone.Id, TimeZoneInfo.Local.Id, StringComparison.Ordinal) ? new DateTime(value.Ticks, DateTimeKind.Local) : value); } else { return(TimeZoneInfo.ConvertTimeFromUtc(new DateTime(value.Ticks, DateTimeKind.Utc), timeZone)); } case DateTimeKind.Utc: return(TimeZoneInfo.ConvertTimeFromUtc(value, timeZone)); case DateTimeKind.Local: return(TimeZoneInfo.ConvertTime(value, timeZone)); } return(value); }
public static DateTime EnsureDateTime(DateTime value, DateTimeHandling dateTimeHandling, UnspecifiedDateTimeHandling unspecifiedDateTimeHandling) { return(EnsureDateTime(value, null, dateTimeHandling, unspecifiedDateTimeHandling)); }