package com.github.ltsopensource.core.commons.time;
import java.text.FieldPosition;
import java.text.Format;
import java.text.ParseException;
import java.text.ParsePosition;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;
/**
* from commons-lang 为了性能
*/
public class FastDateFormat extends Format {
private static final FormatCache<FastDateFormat> cache = new FormatCache<FastDateFormat>() {
protected FastDateFormat createInstance(final String pattern, final TimeZone timeZone, final Locale locale) {
return new FastDateFormat(pattern, timeZone, locale);
}
};
private final FastDatePrinter printer;
private final FastDateParser parser;
//-----------------------------------------------------------------------
public static FastDateFormat getInstance() {
return cache.getInstance();
}
public static FastDateFormat getInstance(final String pattern) {
return cache.getInstance(pattern, null, null);
}
public static FastDateFormat getInstance(final String pattern, final TimeZone timeZone) {
return cache.getInstance(pattern, timeZone, null);
}
public static FastDateFormat getInstance(final String pattern, final Locale locale) {
return cache.getInstance(pattern, null, locale);
}
public static FastDateFormat getInstance(final String pattern, final TimeZone timeZone, final Locale locale) {
return cache.getInstance(pattern, timeZone, locale);
}
//-----------------------------------------------------------------------
protected FastDateFormat(final String pattern, final TimeZone timeZone, final Locale locale) {
this(pattern, timeZone, locale, null);
}
// Constructor
//-----------------------------------------------------------------------
protected FastDateFormat(final String pattern, final TimeZone timeZone, final Locale locale, final Date centuryStart) {
printer = new FastDatePrinter(pattern, timeZone, locale);
parser = new FastDateParser(pattern, timeZone, locale, centuryStart);
}
// Format methods
//-----------------------------------------------------------------------
public StringBuffer format(final Object obj, final StringBuffer toAppendTo, final FieldPosition pos) {
return printer.format(obj, toAppendTo, pos);
}
public String format(final long millis) {
return printer.format(millis);
}
public String format(final Date date) {
return printer.format(date);
}
public String format(final Calendar calendar) {
return printer.format(calendar);
}
public StringBuffer format(final long millis, final StringBuffer buf) {
return printer.format(millis, buf);
}
public StringBuffer format(final Date date, final StringBuffer buf) {
return printer.format(date, buf);
}
public StringBuffer format(final Calendar calendar, final StringBuffer buf) {
return printer.format(calendar, buf);
}
// Parsing
//-----------------------------------------------------------------------
public Date parse(final String source) throws ParseException {
return parser.parse(source);
}
public Date parse(final String source, final ParsePosition pos) {
return parser.parse(source, pos);
}
public Object parseObject(final String source, final ParsePosition pos) {
return parser.parseObject(source, pos);
}
}