//------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //------------------------------------------------------------ using System; using System.Collections.Generic; using System.Text; namespace System.IdentityModel { static class DateTimeUtil { /// /// Add a DateTime and a TimeSpan. /// The maximum time is DateTime.MaxTime. It is not an error if time + timespan > MaxTime. /// Just return MaxTime. /// /// Initial value. /// to add. /// public static DateTime Add(DateTime time, TimeSpan timespan) { if (timespan >= TimeSpan.Zero && DateTime.MaxValue - time <= timespan) { return GetMaxValue(time.Kind); } if (timespan <= TimeSpan.Zero && DateTime.MinValue - time >= timespan) { return GetMinValue(time.Kind); } return time + timespan; } /// /// Add a DateTime and a non-negative TimeSpan. /// The maximum time is DateTime.MaxTime. It is not an error if time + timespan > MaxTime. /// Just return MaxTime. If TimeSpan is < TimeSpan.Zero, throw exception. /// /// /// /// public static DateTime AddNonNegative(DateTime time, TimeSpan timespan) { if (timespan <= TimeSpan.Zero) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.GetString(SR.ID2082))); } return Add(time, timespan); } public static DateTime GetMaxValue(DateTimeKind kind) { return new DateTime(DateTime.MaxValue.Ticks, kind); } public static DateTime GetMinValue(DateTimeKind kind) { return new DateTime(DateTime.MinValue.Ticks, kind); } public static DateTime? ToUniversalTime(DateTime? value) { if (null == value || value.Value.Kind == DateTimeKind.Utc) { return value; } return ToUniversalTime(value.Value); } public static DateTime ToUniversalTime(DateTime value) { if (value.Kind == DateTimeKind.Utc) { return value; } return value.ToUniversalTime(); } } }