FileDocCategorySizeDatePackage
DERUTCTime.javaAPI DocAzureus 3.0.3.44607Tue Jun 08 05:12:56 BST 2004org.bouncycastle.asn1

DERUTCTime

public class DERUTCTime extends DERObject
UTC time object.

Fields Summary
String
time
Constructors Summary
public DERUTCTime(String time)
The correct format for this is YYMMDDHHMMSSZ (it used to be that seconds were never encoded. When you're creating one of these objects from scratch, that's what you want to use, otherwise we'll try to deal with whatever gets read from the input stream... (this is why the input format is different from the getTime() method output).

param
time the time string.

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

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

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

        this.time = dateF.format(time);
    
DERUTCTime(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(UTC_TIME, this.getOctets());
    
public booleanequals(java.lang.Object o)

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

        return time.equals(((DERUTCTime)o).time);
    
public java.lang.StringgetAdjustedTime()
return the time as an adjusted date with a 4 digit year. This goes in the range of 1950 - 2049.

        String   d = this.getTime();

        if (d.charAt(0) < '5")
        {
            return "20" + d;
        }
        else
        {
            return "19" + d;
        }
    
public static org.bouncycastle.asn1.DERUTCTimegetInstance(java.lang.Object obj)
return an UTC Time from the passed in object.

exception
IllegalArgumentException if the object cannot be converted.

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

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

        throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName());
    
public static org.bouncycastle.asn1.DERUTCTimegetInstance(ASN1TaggedObject obj, boolean explicit)
return an UTC Time 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 YYMMDDhhmmssGMT(+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("yyMMddHHmmssz");
To read in the time and get a date which is compatible with our local time zone.

Note: In some cases, due to the local date processing, this may lead to unexpected results. If you want to stick the normal convention of 1950 to 2049 use the getAdjustedTime() method.

        //
        // standardise the format.
        //
        if (time.length() == 11)
        {
            return time.substring(0, 10) + "00GMT+00:00";
        }
        else if (time.length() == 13)
        {
            return time.substring(0, 12) + "GMT+00:00";
        }
        else if (time.length() == 17)
        {
            return time.substring(0, 12) + "GMT" + time.substring(12, 15) + ":" + time.substring(15, 17);
        }

        return time;