FileDocCategorySizeDatePackage
DERGeneralizedTime.javaAPI DocAndroid 1.5 API5082Wed May 06 22:41:06 BST 2009org.bouncycastle.asn1

DERGeneralizedTime

public class DERGeneralizedTime extends DERObject
Generalized time object.

Fields Summary
String
time
Constructors Summary
public DERGeneralizedTime(String time)
The correct format for this is YYYYMMDDHHMMSSZ, or without the Z for local time, or Z+-HHMM on the end, for difference between local time and UTC time.

param
time the time string.

        this.time = time;
    
public DERGeneralizedTime(Date time)
base constructer from a java.util.date object

        SimpleDateFormat dateF = new SimpleDateFormat("yyyyMMddHHmmss'Z'");

        dateF.setTimeZone(new SimpleTimeZone(0,"Z"));

        this.time = dateF.format(time);
    
DERGeneralizedTime(byte[] bytes)

        //
        // explicitly convert to characters
        //
        char[]  dateC = new char[bytes.length];

        for (int i = 0; i != dateC.length; i++)
        {
            dateC[i] = (char)(bytes[i] & 0xff);
        }

        this.time = new String(dateC);
    
Methods Summary
voidencode(DEROutputStream out)

        out.writeEncoded(GENERALIZED_TIME, this.getOctets());
    
public booleanequals(java.lang.Object o)

        if ((o == null) || !(o instanceof DERGeneralizedTime))
        {
            return false;
        }

        return time.equals(((DERGeneralizedTime)o).time);
    
public java.util.DategetDate()

        SimpleDateFormat dateF;

        if (time.indexOf('.") == 14)
        {
            dateF = new SimpleDateFormat("yyyyMMddHHmmss.SSS'Z'");
        }
        else
        {
            dateF = new SimpleDateFormat("yyyyMMddHHmmss'Z'");
        }
        
        dateF.setTimeZone(new SimpleTimeZone(0, "Z"));
        
        return dateF.parse(time);
    
public static org.bouncycastle.asn1.DERGeneralizedTimegetInstance(java.lang.Object obj)
return a generalized time from the passed in object

exception
IllegalArgumentException if the object cannot be converted.

        if (obj == null || obj instanceof DERGeneralizedTime)
        {
            return (DERGeneralizedTime)obj;
        }

        if (obj instanceof ASN1OctetString)
        {
            return new DERGeneralizedTime(((ASN1OctetString)obj).getOctets());
        }

        throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName());
    
public static org.bouncycastle.asn1.DERGeneralizedTimegetInstance(ASN1TaggedObject obj, boolean explicit)
return a Generalized Time object from a tagged object.

param
obj the tagged object holding the object we want
param
explicit true if the object is meant to be explicitly tagged false otherwise.
exception
IllegalArgumentException if the tagged object cannot be converted.

        return getInstance(obj.getObject());
    
private byte[]getOctets()

        char[]  cs = time.toCharArray();
        byte[]  bs = new byte[cs.length];

        for (int i = 0; i != cs.length; i++)
        {
            bs[i] = (byte)cs[i];
        }

        return bs;
    
public java.lang.StringgetTime()
return the time - always in the form of YYYYMMDDhhmmssGMT(+hh:mm|-hh:mm).

Normally in a certificate we would expect "Z" rather than "GMT", however adding the "GMT" means we can just use:

dateF = new SimpleDateFormat("yyyyMMddHHmmssz");
To read in the time and get a date which is compatible with our local time zone.

        //
        // standardise the format.
        //             
        if (time.charAt(time.length() - 1) == 'Z")
        {
            return time.substring(0, time.length() - 1) + "GMT+00:00";
        }
        else
        {
            int signPos = time.length() - 5;
            char sign = time.charAt(signPos);
            if (sign == '-" || sign == '+")
            {
                return time.substring(0, signPos)
                    + "GMT"
                    + time.substring(signPos, signPos + 3)
                    + ":"
                    + time.substring(signPos + 3);
            }
            else
            {
                signPos = time.length() - 3;
                sign = time.charAt(signPos);
                if (sign == '-" || sign == '+")
                {
                    return time.substring(0, signPos)
                        + "GMT"
                        + time.substring(signPos)
                        + ":00";
                }
            }
        }            

        return time;
    
public inthashCode()

        return time.hashCode();