Time
using Org.BouncyCastle.Asn1.X509;
using Org.BouncyCastle.Utilities;
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)
{
if (obj == null)
return null;
Time time = obj as Time;
if (time != null)
return time;
Asn1UtcTime asn1UtcTime = obj as Asn1UtcTime;
if (asn1UtcTime != null)
return new Time(asn1UtcTime);
Asn1GeneralizedTime asn1GeneralizedTime = obj as Asn1GeneralizedTime;
if (asn1GeneralizedTime != null)
return new Time(asn1GeneralizedTime);
throw new ArgumentException("unknown object in factory: " + Platform.GetTypeName(obj), "obj");
}
public static Time GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit)
{
return Asn1Utilities.GetInstanceFromChoice(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();
}
}
}