Package org.bouncycastle.asn1

## Class ASN1GeneralizedTime

- java.lang.Object
- - org.bouncycastle.asn1.ASN1Object
  - - org.bouncycastle.asn1.ASN1Primitive
    - - org.bouncycastle.asn1.ASN1GeneralizedTime

- All Implemented Interfaces:
    `ASN1Encodable`, `Encodable`
  Direct Known Subclasses:
    `DERGeneralizedTime`

      public class ASN1GeneralizedTime
      extends ASN1Primitive

  Base class representing the ASN.1 GeneralizedTime type.

  The main difference between these and UTC time is a 4 digit year.

  One second resolution date+time on UTC timezone (Z) with 4 digit year (valid from 0001 to 9999).

  Timestamp format is: yyyymmddHHMMSS'Z'

  ## X.690

  This is what is called "restricted string", and it uses ASCII characters to encode digits and supplemental data.

  ### 11: Restrictions on BER employed by both CER and DER

  #### 11.7 GeneralizedTime

  11.7.1 The encoding shall terminate with a "Z", as described in the ITU-T Rec. X.680 | ISO/IEC 8824-1 clause on GeneralizedTime.

  11.7.2 The seconds element shall always be present.

  11.7.3 The fractional-seconds elements, if present, shall omit all trailing zeros; if the elements correspond to 0, they shall be wholly omitted, and the decimal point element also shall be omitted.

- - ### Field Summary

    Fields
    Modifier and Type | Field | Description
    --- | --- | ---
    `protected byte[]` | `time` |

  - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `ASN1GeneralizedTime​(java.lang.String time)` | The correct format for this is YYYYMMDDHHMMSS[.f]Z, or without the Z for local time, or Z+-HHMM on the end, for difference between local time and UTC time.
    `ASN1GeneralizedTime​(java.util.Date time)` | Base constructor from a java.util.date object
    `ASN1GeneralizedTime​(java.util.Date time, java.util.Locale locale)` | Base constructor from a java.util.date and Locale - you may need to use this if the default locale doesn't use a Gregorian calender so that the GeneralizedTime produced is compatible with other ASN.1 implementations.

  - ### Method Summary

    All Methods Static Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `java.util.Date` | `getDate()` |
    `static ASN1GeneralizedTime` | `getInstance​(java.lang.Object obj)` | return a generalized time from the passed in object
    `static ASN1GeneralizedTime` | `getInstance​(ASN1TaggedObject obj, boolean explicit)` | return a Generalized Time object from a tagged object.
    `java.lang.String` | `getTime()` | return the time - always in the form of YYYYMMDDhhmmssGMT(+hh:mm|-hh:mm).
    `java.lang.String` | `getTimeString()` | Return the time.
    `protected boolean` | `hasFractionalSeconds()` |
    `int` | `hashCode()` |
    `protected boolean` | `hasMinutes()` |
    `protected boolean` | `hasSeconds()` |

    - ### Methods inherited from class org.bouncycastle.asn1.ASN1Primitive

      `encodeTo, encodeTo, equals, equals, equals, fromByteArray, toASN1Primitive`

    - ### Methods inherited from class org.bouncycastle.asn1.ASN1Object

      `getEncoded, getEncoded, hasEncodedTagValue`

    - ### Methods inherited from class java.lang.Object

      `clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### time

          protected byte[] time

  - ### Constructor Detail

    - #### ASN1GeneralizedTime

          public ASN1GeneralizedTime​(java.lang.String time)

      The correct format for this is YYYYMMDDHHMMSS[.f]Z, or without the Z for local time, or Z+-HHMM on the end, for difference between local time and UTC time. The fractional second amount f must consist of at least one number with trailing zeroes removed.
      Parameters:
        `time` - the time string.
      Throws:
        `java.lang.IllegalArgumentException` - if String is an illegal format.

    - #### ASN1GeneralizedTime

          public ASN1GeneralizedTime​(java.util.Date time)

      Base constructor from a java.util.date object
      Parameters:
        `time` - a date object representing the time of interest.

    - #### ASN1GeneralizedTime

          public ASN1GeneralizedTime​(java.util.Date time,
                                     java.util.Locale locale)

      Base constructor from a java.util.date and Locale - you may need to use this if the default locale doesn't use a Gregorian calender so that the GeneralizedTime produced is compatible with other ASN.1 implementations.
      Parameters:
        `time` - a date object representing the time of interest.
        `locale` - an appropriate Locale for producing an ASN.1 GeneralizedTime value.

  - ### Method Detail

    - #### getInstance

          public static ASN1GeneralizedTime getInstance​(java.lang.Object obj)

      return a generalized time from the passed in object
      Parameters:
        `obj` - an ASN1GeneralizedTime or an object that can be converted into one.
      Returns:
        an ASN1GeneralizedTime instance, or null.
      Throws:
        `java.lang.IllegalArgumentException` - if the object cannot be converted.

    - #### getInstance

          public static ASN1GeneralizedTime getInstance​(ASN1TaggedObject obj,
                                                        boolean explicit)

      return a Generalized Time object from a tagged object.
      Parameters:
        `obj` - the tagged object holding the object we want
        `explicit` - true if the object is meant to be explicitly tagged false otherwise.
      Returns:
        an ASN1GeneralizedTime instance.
      Throws:
        `java.lang.IllegalArgumentException` - if the tagged object cannot be converted.

    - #### getTimeString

          public java.lang.String getTimeString()

      Return the time.
      Returns:
        The time string as it appeared in the encoded object.

    - #### getTime

          public java.lang.String getTime()

      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.
      Returns:
        a String representation of the time.

    - #### getDate

          public java.util.Date getDate()
                                 throws java.text.ParseException

      Throws:
        `java.text.ParseException`

    - #### hasFractionalSeconds

          protected boolean hasFractionalSeconds()

    - #### hasSeconds

          protected boolean hasSeconds()

    - #### hasMinutes

          protected boolean hasMinutes()

    - #### hashCode

          public int hashCode()

      Specified by:
        `hashCode` in class `ASN1Primitive`