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.

- - ### Constructor Summary

    Constructors
    Constructor and Description
    `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 `Date` and an explicit `Locale`.
    `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.

  - ### Method Summary

    All Methods Static Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `java.util.Date` | `getDate()`
    `static ASN1GeneralizedTime` | `getInstance(ASN1TaggedObject taggedObject, boolean declaredExplicit)` return a Generalized Time object from a tagged object.
    `static ASN1GeneralizedTime` | `getInstance(java.lang.Object obj)` return a generalized time from the passed in object
    `static ASN1GeneralizedTime` | `getTagged(ASN1TaggedObject taggedObject, boolean declaredExplicit)`
    `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, fromStream, 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`

- - ### 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 `Date` and an explicit `Locale`. The `locale` selects the calendar used by the underlying `SimpleDateFormat`. Most callers should prefer the simple `ASN1GeneralizedTime(Date)` form, which always formats under an English Gregorian locale (so the encoded year is the spec-mandated Gregorian one regardless of `Locale.getDefault()`, including on JVMs whose default uses a non-Gregorian calendar such as Thai Buddhist `th_TH_TH_#u-nu-thai` or Japanese Imperial `ja_JP_JP_#u-ca-japanese`). Reach for this `(Date, Locale)` form only when you need explicit control over the formatter's calendar.
      Parameters:
        `time` - a date object representing the time of interest.
        `locale` - the Locale whose calendar the underlying SimpleDateFormat should use.

  - ### 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 taggedObject,
                                                        boolean declaredExplicit)

      return a Generalized Time object from a tagged object.
      Parameters:
        `taggedObject` - the tagged object holding the object we want
        `declaredExplicit` - 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.

    - #### getTagged

          public static ASN1GeneralizedTime getTagged(ASN1TaggedObject taggedObject,
                                                      boolean declaredExplicit)

    - #### 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`