📄 dergeneralizedtime.java
字号:
// Decompiled by Jad v1.5.8e2. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://kpdus.tripod.com/jad.html
// Decompiler options: packimports(3) fieldsfirst ansi space
// Source File Name: DERGeneralizedTime.java
package org.bouncycastle.asn1;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
// Referenced classes of package org.bouncycastle.asn1:
// ASN1Object, ASN1OctetString, ASN1TaggedObject, DEROutputStream,
// DERObject
public class DERGeneralizedTime extends ASN1Object
{
String time;
public static DERGeneralizedTime getInstance(Object obj)
{
if (obj == null || (obj instanceof DERGeneralizedTime))
return (DERGeneralizedTime)obj;
if (obj instanceof ASN1OctetString)
return new DERGeneralizedTime(((ASN1OctetString)obj).getOctets());
else
throw new IllegalArgumentException((new StringBuilder()).append("illegal object in getInstance: ").append(obj.getClass().getName()).toString());
}
public static DERGeneralizedTime getInstance(ASN1TaggedObject obj, boolean explicit)
{
return getInstance(obj.getObject());
}
public DERGeneralizedTime(String time)
{
this.time = time;
try
{
getDate();
}
catch (ParseException e)
{
throw new IllegalArgumentException((new StringBuilder()).append("invalid date string: ").append(e.getMessage()).toString());
}
}
public DERGeneralizedTime(Date time)
{
SimpleDateFormat dateF = new SimpleDateFormat("yyyyMMddHHmmss'Z'");
dateF.setTimeZone(new SimpleTimeZone(0, "Z"));
this.time = dateF.format(time);
}
DERGeneralizedTime(byte bytes[])
{
char dateC[] = new char[bytes.length];
for (int i = 0; i != dateC.length; i++)
dateC[i] = (char)(bytes[i] & 0xff);
time = new String(dateC);
}
public String getTimeString()
{
return time;
}
public String getTime()
{
if (time.charAt(time.length() - 1) == 'Z')
return (new StringBuilder()).append(time.substring(0, time.length() - 1)).append("GMT+00:00").toString();
int signPos = time.length() - 5;
char sign = time.charAt(signPos);
if (sign == '-' || sign == '+')
return (new StringBuilder()).append(time.substring(0, signPos)).append("GMT").append(time.substring(signPos, signPos + 3)).append(":").append(time.substring(signPos + 3)).toString();
signPos = time.length() - 3;
sign = time.charAt(signPos);
if (sign == '-' || sign == '+')
return (new StringBuilder()).append(time.substring(0, signPos)).append("GMT").append(time.substring(signPos)).append(":00").toString();
else
return (new StringBuilder()).append(time).append(calculateGMTOffset()).toString();
}
private String calculateGMTOffset()
{
String sign = "+";
TimeZone timeZone = TimeZone.getDefault();
int offset = timeZone.getRawOffset();
if (offset < 0)
{
sign = "-";
offset = -offset;
}
int hours = offset / 0x36ee80;
int minutes = (offset - hours * 60 * 60 * 1000) / 60000;
try
{
if (timeZone.useDaylightTime() && timeZone.inDaylightTime(getDate()))
hours += sign.equals("+") ? 1 : -1;
}
catch (ParseException e) { }
return (new StringBuilder()).append("GMT").append(sign).append(convert(hours)).append(":").append(convert(minutes)).toString();
}
private String convert(int time)
{
if (time < 10)
return (new StringBuilder()).append("0").append(time).toString();
else
return Integer.toString(time);
}
public Date getDate()
throws ParseException
{
String d = time;
SimpleDateFormat dateF;
if (time.endsWith("Z"))
{
if (hasFractionalSeconds())
dateF = new SimpleDateFormat("yyyyMMddHHmmss.SSSS'Z'");
else
dateF = new SimpleDateFormat("yyyyMMddHHmmss'Z'");
dateF.setTimeZone(new SimpleTimeZone(0, "Z"));
} else
if (time.indexOf('-') > 0 || time.indexOf('+') > 0)
{
d = getTime();
if (hasFractionalSeconds())
dateF = new SimpleDateFormat("yyyyMMddHHmmss.SSSSz");
else
dateF = new SimpleDateFormat("yyyyMMddHHmmssz");
dateF.setTimeZone(new SimpleTimeZone(0, "Z"));
} else
{
if (hasFractionalSeconds())
dateF = new SimpleDateFormat("yyyyMMddHHmmss.SSSS");
else
dateF = new SimpleDateFormat("yyyyMMddHHmmss");
dateF.setTimeZone(new SimpleTimeZone(0, TimeZone.getDefault().getID()));
}
return dateF.parse(d);
}
private boolean hasFractionalSeconds()
{
return time.indexOf('.') == 14;
}
private byte[] getOctets()
{
char cs[] = time.toCharArray();
byte bs[] = new byte[cs.length];
for (int i = 0; i != cs.length; i++)
bs[i] = (byte)cs[i];
return bs;
}
void encode(DEROutputStream out)
throws IOException
{
out.writeEncoded(24, getOctets());
}
boolean asn1Equals(DERObject o)
{
if (!(o instanceof DERGeneralizedTime))
return false;
else
return time.equals(((DERGeneralizedTime)o).time);
}
public int hashCode()
{
return time.hashCode();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -