Time
using Org.BouncyCastle.Asn1.X509;
using System;
using System.Globalization;
namespace Org.BouncyCastle.Asn1.Cms
{
public class Time : Asn1Encodable, IAsn1Choice
{
private readonly Asn1Object m_timeObject;
[Obsolete("Use 'ToDateTime' instead")]
public DateTime Date {
get {
return ToDateTime();
}
}
public static Time GetInstance(object obj)
{
return Asn1Utilities.GetInstanceChoice(obj, GetOptional);
}
public static Time GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit)
{
return Asn1Utilities.GetInstanceChoice(taggedObject, declaredExplicit, GetInstance);
}
public static Time GetOptional(Asn1Encodable element)
{
if (element == null)
throw new ArgumentNullException("element");
Time time = element as Time;
if (time != null)
return time;
Asn1UtcTime optional = Asn1UtcTime.GetOptional(element);
if (optional != null)
return new Time(optional);
Asn1GeneralizedTime optional2 = Asn1GeneralizedTime.GetOptional(element);
if (optional2 != null)
return new Time(optional2);
return null;
}
public static Time GetTagged(Asn1TaggedObject taggedObject, bool declaredExplicit)
{
return Asn1Utilities.GetTaggedChoice(taggedObject, declaredExplicit, GetInstance);
}
public Time(Asn1GeneralizedTime generalizedTime)
{
if (generalizedTime == null)
throw new ArgumentNullException("generalizedTime");
m_timeObject = generalizedTime;
}
public Time(Asn1UtcTime utcTime)
{
if (utcTime == null)
throw new ArgumentNullException("utcTime");
utcTime.ToDateTime(2049);
m_timeObject = utcTime;
}
public Time(DateTime date)
{
DateTime dateTime = date.ToUniversalTime();
if (dateTime.Year < 1950 || dateTime.Year > 2049)
m_timeObject = Rfc5280Asn1Utilities.CreateGeneralizedTime(dateTime);
else
m_timeObject = Rfc5280Asn1Utilities.CreateUtcTime(dateTime);
}
public DateTime ToDateTime()
{
try {
return (m_timeObject as Asn1UtcTime)?.ToDateTime(2049) ?? ((Asn1GeneralizedTime)m_timeObject).ToDateTime();
} catch (FormatException ex) {
throw new InvalidOperationException("invalid date string: " + ex.Message);
}
}
public override Asn1Object ToAsn1Object()
{
return m_timeObject;
}
public override string ToString()
{
Asn1UtcTime asn1UtcTime = m_timeObject as Asn1UtcTime;
DateTime dateTime;
if (asn1UtcTime != null) {
dateTime = asn1UtcTime.ToDateTime(2049);
return dateTime.ToString("yyyyMMddHHmmssK", DateTimeFormatInfo.InvariantInfo);
}
Asn1GeneralizedTime asn1GeneralizedTime = m_timeObject as Asn1GeneralizedTime;
if (asn1GeneralizedTime != null) {
dateTime = asn1GeneralizedTime.ToDateTime();
return dateTime.ToString("yyyyMMddHHmmss.FFFFFFFK", DateTimeFormatInfo.InvariantInfo);
}
throw new InvalidOperationException();
}
}
}