package org.apache.haox.asn1.type;
import org.apache.haox.asn1.UniversalTag;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.SimpleTimeZone;
public class Asn1UtcTime extends Asn1Simple<Date>
{
public Asn1UtcTime() {
this(null);
}
public Asn1UtcTime(long time) {
super(UniversalTag.UTC_TIME, new Date(time * 1000L));
}
public Asn1UtcTime(Date date) {
super(UniversalTag.UTC_TIME, date);
}
protected void toValue() throws IOException {
String dateStr = new String(getBytes(), StandardCharsets.US_ASCII);
String fixedDateStr = dateStr;
/*
* Make sure fixed date str be of the complete pattern 'YYMMDDhhmmss+/-hhmm'
*/
int strLen = fixedDateStr.length();
if (strLen == 6) { // YYMMDD
fixedDateStr += "000000+0000";
} else if (strLen == 7) { // YYMMDDZ
fixedDateStr = fixedDateStr.replace("Z", "000000+0000");
} else if (strLen == 10) { // YYMMDDhhmm
fixedDateStr += "00+0000";
} else if (strLen == 11) { // YYMMDDhhmmZ
fixedDateStr = fixedDateStr.replace("Z", "00+0000");
} else if (strLen == 12) { // YYMMDDhhmmss
fixedDateStr += "+0000";
} else if (strLen == 13) { // YYMMDDhhmmZ
fixedDateStr = fixedDateStr.replace("Z", "+0000");
} else if (strLen != 17) {
throw new IllegalArgumentException("Bad utc time string " + dateStr);
}
SimpleDateFormat sdf;
sdf = new SimpleDateFormat("yyMMddHHmmssZ");
sdf.setTimeZone(new SimpleTimeZone(0, "Z"));
try {
setValue(sdf.parse(fixedDateStr));
} catch (ParseException e) {
throw new IOException("Failed to parse " + dateStr + " as utc time", e);
}
}
@Override
protected void toBytes() {
Date date = getValue();
SimpleDateFormat sdf = new SimpleDateFormat("yyMMddHHmmss'Z'");
sdf.setTimeZone(new SimpleTimeZone(0, "Z"));
String str = sdf.format(date);
byte[] bytes = str.getBytes(StandardCharsets.US_ASCII);
setBytes(bytes);
}
}