resolve darcs stupidity
[org.ibex.core.git] / src / org / bouncycastle / asn1 / x509 / Time.java
1 package org.bouncycastle.asn1.x509;
2
3 import java.util.Date;
4 import java.util.SimpleTimeZone;
5 import java.text.ParsePosition;
6 import java.text.SimpleDateFormat;
7
8 import org.bouncycastle.asn1.*;
9
10 public class Time
11     implements DEREncodable
12 {
13     DERObject   time;
14
15     public static Time getInstance(
16         ASN1TaggedObject obj,
17         boolean          explicit)
18     {
19         return getInstance(obj.getObject());
20     }
21
22     public Time(
23         DERObject   time)
24     {
25         if (!(time instanceof DERUTCTime)
26             && !(time instanceof DERGeneralizedTime))
27         {
28             throw new IllegalArgumentException("unknown object passed to Time");
29         }
30
31         this.time = time; 
32     }
33
34     /**
35      * creates a time object from a given date - if the date is between 1950
36      * and 2049 a UTCTime object is generated, otherwise a GeneralizedTime
37      * is used.
38      */
39     public Time(
40         Date    date)
41     {
42         SimpleTimeZone      tz = new SimpleTimeZone(0, "Z");
43         SimpleDateFormat    dateF = new SimpleDateFormat("yyyyMMddHHmmss");
44
45         dateF.setTimeZone(tz);
46
47         String  d = dateF.format(date) + "Z";
48         int     year = Integer.parseInt(d.substring(0, 4));
49
50         if (year < 1950 || year > 2049)
51         {
52             time = new DERGeneralizedTime(d);
53         }
54         else
55         {
56             time = new DERUTCTime(d.substring(2));
57         }
58     }
59
60     public static Time getInstance(
61         Object  obj)
62     {
63         if (obj instanceof Time)
64         {
65             return (Time)obj;
66         }
67         else if (obj instanceof DERUTCTime)
68         {
69             return new Time((DERUTCTime)obj);
70         }
71         else if (obj instanceof DERGeneralizedTime)
72         {
73             return new Time((DERGeneralizedTime)obj);
74         }
75
76         throw new IllegalArgumentException("unknown object in factory");
77     }
78
79     public String getTime()
80     {
81         if (time instanceof DERUTCTime)
82         {
83             return ((DERUTCTime)time).getAdjustedTime();
84         }
85         else
86         {
87             return ((DERGeneralizedTime)time).getTime();
88         }
89     }
90
91     public Date getDate()
92     {
93         SimpleDateFormat dateF = new SimpleDateFormat("yyyyMMddHHmmssz");
94
95         return dateF.parse(this.getTime(), new ParsePosition(0));
96     }
97
98     /**
99      * <pre>
100      * Time ::= CHOICE {
101      *             utcTime        UTCTime,
102      *             generalTime    GeneralizedTime }
103      * </pre>
104      */
105     public DERObject getDERObject()
106     {
107         return time;
108     }
109 }