2002/03/21 01:19:32
[org.ibex.core.git] / src / org / bouncycastle / asn1 / DERUTCTime.java
diff --git a/src/org/bouncycastle/asn1/DERUTCTime.java b/src/org/bouncycastle/asn1/DERUTCTime.java
new file mode 100644 (file)
index 0000000..061bf54
--- /dev/null
@@ -0,0 +1,79 @@
+package org.bouncycastle.asn1;
+
+import java.io.*;
+import java.util.*;
+import java.io.*;
+
+/**
+ * UTC time object.
+ */
+public class DERUTCTime
+    extends DERObject
+{
+    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).
+     * <p>
+     * You can generate a Java date string in the right format by using:
+     * <pre>
+     *      dateF = new SimpleDateFormat("yyMMddHHmmss");
+     *      tz = new SimpleTimeZone(0, "Z");
+     *     
+     *      dateF.setTimeZone(tz);
+     *
+     *      utcTime = new DERUTCTime(dateF.format(new Date()) + "Z");
+     * </pre>
+     *
+     * @param time the time string.
+     */
+    public DERUTCTime(
+        String  time)
+    {
+        this.time = time;
+    }
+
+    /**
+     * return the time - always in the form of 
+     *  YYMMDDhhmmssGMT(+hh:mm|-hh:mm).
+     * <p>
+     * Normally in a certificate we would expect "Z" rather than "GMT",
+     * however adding the "GMT" means we can just use:
+     * <pre>
+     *     dateF = new SimpleDateFormat("yyMMddHHmmssz");
+     * </pre>
+     * To read in the time and get a date which is compatible with our local
+     * time zone.
+     */
+    public String getTime()
+    {
+        //
+        // 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;
+    }
+
+    void encode(
+        DEROutputStream  out)
+        throws IOException
+    {
+        out.writeEncoded(UTC_TIME, time.getBytes());
+    }
+}