e79aa3c0ed
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
83 lines
2.7 KiB
C#
83 lines
2.7 KiB
C#
//------------------------------------------------------------
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
//------------------------------------------------------------
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Text;
|
|
|
|
namespace System.IdentityModel
|
|
{
|
|
static class DateTimeUtil
|
|
{
|
|
/// <summary>
|
|
/// Add a DateTime and a TimeSpan.
|
|
/// The maximum time is DateTime.MaxTime. It is not an error if time + timespan > MaxTime.
|
|
/// Just return MaxTime.
|
|
/// </summary>
|
|
/// <param name="time">Initial <see cref="DateTime"/> value.</param>
|
|
/// <param name="timespan"><see cref="TimeSpan"/> to add.</param>
|
|
/// <returns></returns>
|
|
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;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 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.
|
|
/// </summary>
|
|
/// <param name="time"></param>
|
|
/// <param name="timespan"></param>
|
|
/// <returns></returns>
|
|
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();
|
|
}
|
|
}
|
|
}
|