All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.bouncycastle.asn1.cms.Time Maven / Gradle / Ivy

Go to download

The Bouncy Castle Java APIs for ASN.1 extension and utility APIs used to support bcpkix and bctls. This jar contains APIs for JDK 1.5 to JDK 1.8.

There is a newer version: 1.78.1
Show newest version
package org.bouncycastle.asn1.cms;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.SimpleTimeZone;

import org.bouncycastle.asn1.ASN1Choice;
import org.bouncycastle.asn1.ASN1GeneralizedTime;
import org.bouncycastle.asn1.ASN1Object;
import org.bouncycastle.asn1.ASN1Primitive;
import org.bouncycastle.asn1.ASN1TaggedObject;
import org.bouncycastle.asn1.ASN1UTCTime;
import org.bouncycastle.asn1.DERGeneralizedTime;
import org.bouncycastle.asn1.DERUTCTime;
import org.bouncycastle.asn1.LocaleUtil;

/**
 * RFC 5652:
 * Dual-mode timestamp format producing either UTCTIme or GeneralizedTime.
 * 

*

 * Time ::= CHOICE {
 *     utcTime        UTCTime,
 *     generalTime    GeneralizedTime }
 * 
*

* This has a constructor using java.util.Date for input which generates * a {@link org.bouncycastle.asn1.DERUTCTime DERUTCTime} object if the * supplied datetime is in range 1950-01-01-00:00:00 UTC until 2049-12-31-23:59:60 UTC. * If the datetime value is outside that range, the generated object will be * {@link org.bouncycastle.asn1.DERGeneralizedTime DERGeneralizedTime}. */ public class Time extends ASN1Object implements ASN1Choice { ASN1Primitive time; public static Time getInstance( ASN1TaggedObject obj, boolean explicit) { if (!explicit) { throw new IllegalArgumentException("choice item must be explicitly tagged"); } return getInstance(obj.getExplicitBaseObject()); } private Time( ASN1Primitive time) { if (!(time instanceof ASN1UTCTime) && !(time instanceof ASN1GeneralizedTime)) { throw new IllegalArgumentException("unknown object passed to Time"); } this.time = time; } /** * Creates a time object from a given date - if the date is between 1950 * and 2049 a UTCTime object is generated, otherwise a GeneralizedTime * is used. * * @param time a date object representing the time of interest. */ public Time( Date time) { SimpleTimeZone tz = new SimpleTimeZone(0, "Z"); SimpleDateFormat dateF = new SimpleDateFormat("yyyyMMddHHmmss", LocaleUtil.EN_Locale); dateF.setTimeZone(tz); String d = dateF.format(time) + "Z"; int year = Integer.parseInt(d.substring(0, 4)); if (year < 1950 || year > 2049) { this.time = new DERGeneralizedTime(d); } else { this.time = new DERUTCTime(d.substring(2)); } } /** * Creates a time object from a given date and locale - if the date is between 1950 * and 2049 a UTCTime object is generated, otherwise a GeneralizedTime * is used. You may need to use this constructor if the default locale * doesn't use a Gregorian calender so that the GeneralizedTime produced is compatible with other ASN.1 implementations. * * @param time a date object representing the time of interest. * @param locale an appropriate Locale for producing an ASN.1 GeneralizedTime value. */ public Time( Date time, Locale locale) { SimpleTimeZone tz = new SimpleTimeZone(0, "Z"); SimpleDateFormat dateF = new SimpleDateFormat("yyyyMMddHHmmss", locale); dateF.setTimeZone(tz); String d = dateF.format(time) + "Z"; int year = Integer.parseInt(d.substring(0, 4)); if (year < 1950 || year > 2049) { this.time = new DERGeneralizedTime(d); } else { this.time = new DERUTCTime(d.substring(2)); } } /** * Return a Time object from the given object. *

* Accepted inputs: *

    *
  • null → null *
  • {@link Time} object *
  • {@link org.bouncycastle.asn1.DERUTCTime DERUTCTime} object *
  • {@link org.bouncycastle.asn1.DERGeneralizedTime DERGeneralizedTime} object *
* * @param obj the object we want converted. * @exception IllegalArgumentException if the object cannot be converted. */ public static Time getInstance( Object obj) { if (obj == null || obj instanceof Time) { return (Time)obj; } else if (obj instanceof ASN1UTCTime) { return new Time((ASN1UTCTime)obj); } else if (obj instanceof ASN1GeneralizedTime) { return new Time((ASN1GeneralizedTime)obj); } throw new IllegalArgumentException("unknown object in factory: " + obj.getClass().getName()); } /** * Get the date and time as a String in full form century format. */ public String getTime() { if (time instanceof ASN1UTCTime) { return ((ASN1UTCTime)time).getAdjustedTime(); } else { return ((ASN1GeneralizedTime)time).getTime(); } } /** * Get java.util.Date version of date+time. */ public Date getDate() { try { if (time instanceof ASN1UTCTime) { return ((ASN1UTCTime)time).getAdjustedDate(); } else { return ((ASN1GeneralizedTime)time).getDate(); } } catch (ParseException e) { // this should never happen throw new IllegalStateException("invalid date string: " + e.getMessage()); } } /** * Produce an object suitable for an ASN1OutputStream. */ public ASN1Primitive toASN1Primitive() { return time; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy