基于commons-lang-2.4.jar

org.apache.commons.lang.time.DateFormatUtils类

package org.apache.commons.lang.time;

import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone; public class DateFormatUtils
{
public static final FastDateFormat ISO_DATETIME_FORMAT = FastDateFormat.getInstance("yyyy-MM-dd'T'HH:mm:ss"); public static final FastDateFormat ISO_DATETIME_TIME_ZONE_FORMAT = FastDateFormat.getInstance("yyyy-MM-dd'T'HH:mm:ssZZ"); public static final FastDateFormat ISO_DATE_FORMAT = FastDateFormat.getInstance("yyyy-MM-dd"); public static final FastDateFormat ISO_DATE_TIME_ZONE_FORMAT = FastDateFormat.getInstance("yyyy-MM-ddZZ"); public static final FastDateFormat ISO_TIME_FORMAT = FastDateFormat.getInstance("'T'HH:mm:ss"); public static final FastDateFormat ISO_TIME_TIME_ZONE_FORMAT = FastDateFormat.getInstance("'T'HH:mm:ssZZ"); public static final FastDateFormat ISO_TIME_NO_T_FORMAT = FastDateFormat.getInstance("HH:mm:ss"); public static final FastDateFormat ISO_TIME_NO_T_TIME_ZONE_FORMAT = FastDateFormat.getInstance("HH:mm:ssZZ"); public static final FastDateFormat SMTP_DATETIME_FORMAT = FastDateFormat.getInstance("EEE, dd MMM yyyy HH:mm:ss Z", Locale.US); public static String formatUTC(long millis, String pattern)
{
return format(new Date(millis), pattern, DateUtils.UTC_TIME_ZONE, null);
} public static String formatUTC(Date date, String pattern)
{
return format(date, pattern, DateUtils.UTC_TIME_ZONE, null);
} public static String formatUTC(long millis, String pattern, Locale locale)
{
return format(new Date(millis), pattern, DateUtils.UTC_TIME_ZONE, locale);
} public static String formatUTC(Date date, String pattern, Locale locale)
{
return format(date, pattern, DateUtils.UTC_TIME_ZONE, locale);
} public static String format(long millis, String pattern)
{
return format(new Date(millis), pattern, null, null);
} public static String format(Date date, String pattern)
{
return format(date, pattern, null, null);
} public static String format(Calendar calendar, String pattern)
{
return format(calendar, pattern, null, null);
} public static String format(long millis, String pattern, TimeZone timeZone)
{
return format(new Date(millis), pattern, timeZone, null);
} public static String format(Date date, String pattern, TimeZone timeZone)
{
return format(date, pattern, timeZone, null);
} public static String format(Calendar calendar, String pattern, TimeZone timeZone)
{
return format(calendar, pattern, timeZone, null);
} public static String format(long millis, String pattern, Locale locale)
{
return format(new Date(millis), pattern, null, locale);
} public static String format(Date date, String pattern, Locale locale)
{
return format(date, pattern, null, locale);
} public static String format(Calendar calendar, String pattern, Locale locale)
{
return format(calendar, pattern, null, locale);
} public static String format(long millis, String pattern, TimeZone timeZone, Locale locale)
{
return format(new Date(millis), pattern, timeZone, locale);
} public static String format(Date date, String pattern, TimeZone timeZone, Locale locale)
{
FastDateFormat df = FastDateFormat.getInstance(pattern, timeZone, locale);
return df.format(date);
} public static String format(Calendar calendar, String pattern, TimeZone timeZone, Locale locale)
{
FastDateFormat df = FastDateFormat.getInstance(pattern, timeZone, locale);
return df.format(calendar);
}
}
package org.apache.commons.lang.time;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.text.DateFormat;
import java.text.DateFormatSymbols;
import java.text.FieldPosition;
import java.text.Format;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.TimeZone;
import org.apache.commons.lang.Validate; public class FastDateFormat
extends Format
{
private static final long serialVersionUID = 1L;
public static final int FULL = 0;
public static final int LONG = 1;
public static final int MEDIUM = 2;
public static final int SHORT = 3;
private static String cDefaultPattern;
private static final Map cInstanceCache = new HashMap(7);
private static final Map cDateInstanceCache = new HashMap(7);
private static final Map cTimeInstanceCache = new HashMap(7);
private static final Map cDateTimeInstanceCache = new HashMap(7);
private static final Map cTimeZoneDisplayCache = new HashMap(7); private final String mPattern; private final TimeZone mTimeZone; private final boolean mTimeZoneForced; private final Locale mLocale; private final boolean mLocaleForced; private transient Rule[] mRules; private transient int mMaxLengthEstimate; public static FastDateFormat getInstance()
{
return getInstance(getDefaultPattern(), null, null);
} public static FastDateFormat getInstance(String pattern)
{
return getInstance(pattern, null, null);
} public static FastDateFormat getInstance(String pattern, TimeZone timeZone)
{
return getInstance(pattern, timeZone, null);
} public static FastDateFormat getInstance(String pattern, Locale locale)
{
return getInstance(pattern, null, locale);
} public static synchronized FastDateFormat getInstance(String pattern, TimeZone timeZone, Locale locale)
{
FastDateFormat emptyFormat = new FastDateFormat(pattern, timeZone, locale);
FastDateFormat format = (FastDateFormat)cInstanceCache.get(emptyFormat);
if (format == null) {
format = emptyFormat;
format.init();
cInstanceCache.put(format, format);
}
return format;
} public static FastDateFormat getDateInstance(int style)
{
return getDateInstance(style, null, null);
} public static FastDateFormat getDateInstance(int style, Locale locale)
{
return getDateInstance(style, null, locale);
} public static FastDateFormat getDateInstance(int style, TimeZone timeZone)
{
return getDateInstance(style, timeZone, null);
} public static synchronized FastDateFormat getDateInstance(int style, TimeZone timeZone, Locale locale)
{
Object key = new Integer(style);
if (timeZone != null) {
key = new Pair(key, timeZone);
} if (locale == null) {
locale = Locale.getDefault();
} key = new Pair(key, locale); FastDateFormat format = (FastDateFormat)cDateInstanceCache.get(key);
if (format == null) {
try {
SimpleDateFormat formatter = (SimpleDateFormat)DateFormat.getDateInstance(style, locale);
String pattern = formatter.toPattern();
format = getInstance(pattern, timeZone, locale);
cDateInstanceCache.put(key, format);
}
catch (ClassCastException ex) {
throw new IllegalArgumentException("No date pattern for locale: " + locale);
}
}
return format;
} public static FastDateFormat getTimeInstance(int style)
{
return getTimeInstance(style, null, null);
} public static FastDateFormat getTimeInstance(int style, Locale locale)
{
return getTimeInstance(style, null, locale);
} public static FastDateFormat getTimeInstance(int style, TimeZone timeZone)
{
return getTimeInstance(style, timeZone, null);
} public static synchronized FastDateFormat getTimeInstance(int style, TimeZone timeZone, Locale locale)
{
Object key = new Integer(style);
if (timeZone != null) {
key = new Pair(key, timeZone);
}
if (locale != null) {
key = new Pair(key, locale);
} FastDateFormat format = (FastDateFormat)cTimeInstanceCache.get(key);
if (format == null) {
if (locale == null) {
locale = Locale.getDefault();
}
try
{
SimpleDateFormat formatter = (SimpleDateFormat)DateFormat.getTimeInstance(style, locale);
String pattern = formatter.toPattern();
format = getInstance(pattern, timeZone, locale);
cTimeInstanceCache.put(key, format);
}
catch (ClassCastException ex) {
throw new IllegalArgumentException("No date pattern for locale: " + locale);
}
}
return format;
} public static FastDateFormat getDateTimeInstance(int dateStyle, int timeStyle)
{
return getDateTimeInstance(dateStyle, timeStyle, null, null);
} public static FastDateFormat getDateTimeInstance(int dateStyle, int timeStyle, Locale locale)
{
return getDateTimeInstance(dateStyle, timeStyle, null, locale);
} public static FastDateFormat getDateTimeInstance(int dateStyle, int timeStyle, TimeZone timeZone)
{
return getDateTimeInstance(dateStyle, timeStyle, timeZone, null);
} public static synchronized FastDateFormat getDateTimeInstance(int dateStyle, int timeStyle, TimeZone timeZone, Locale locale)
{
Object key = new Pair(new Integer(dateStyle), new Integer(timeStyle));
if (timeZone != null) {
key = new Pair(key, timeZone);
}
if (locale == null) {
locale = Locale.getDefault();
}
key = new Pair(key, locale); FastDateFormat format = (FastDateFormat)cDateTimeInstanceCache.get(key);
if (format == null) {
try {
SimpleDateFormat formatter = (SimpleDateFormat)DateFormat.getDateTimeInstance(dateStyle, timeStyle, locale); String pattern = formatter.toPattern();
format = getInstance(pattern, timeZone, locale);
cDateTimeInstanceCache.put(key, format);
}
catch (ClassCastException ex) {
throw new IllegalArgumentException("No date time pattern for locale: " + locale);
}
}
return format;
} static synchronized String getTimeZoneDisplay(TimeZone tz, boolean daylight, int style, Locale locale)
{
Object key = new TimeZoneDisplayKey(tz, daylight, style, locale);
String value = (String)cTimeZoneDisplayCache.get(key);
if (value == null)
{
value = tz.getDisplayName(daylight, style, locale);
cTimeZoneDisplayCache.put(key, value);
}
return value;
} private static synchronized String getDefaultPattern()
{
if (cDefaultPattern == null) {
cDefaultPattern = new SimpleDateFormat().toPattern();
}
return cDefaultPattern;
} protected FastDateFormat(String pattern, TimeZone timeZone, Locale locale)
{
if (pattern == null) {
throw new IllegalArgumentException("The pattern must not be null");
}
this.mPattern = pattern; this.mTimeZoneForced = (timeZone != null);
if (timeZone == null) {
timeZone = TimeZone.getDefault();
}
this.mTimeZone = timeZone; this.mLocaleForced = (locale != null);
if (locale == null) {
locale = Locale.getDefault();
}
this.mLocale = locale;
} protected void init()
{
List rulesList = parsePattern();
this.mRules = ((Rule[])rulesList.toArray(new Rule[rulesList.size()])); int len = 0;
int i = this.mRules.length; for (;;) { i--; if (i < 0) break;
len += this.mRules[i].estimateLength();
} this.mMaxLengthEstimate = len;
} protected List parsePattern()
{
DateFormatSymbols symbols = new DateFormatSymbols(this.mLocale);
List rules = new ArrayList(); String[] ERAs = symbols.getEras();
String[] months = symbols.getMonths();
String[] shortMonths = symbols.getShortMonths();
String[] weekdays = symbols.getWeekdays();
String[] shortWeekdays = symbols.getShortWeekdays();
String[] AmPmStrings = symbols.getAmPmStrings(); int length = this.mPattern.length();
int[] indexRef = new int[1]; for (int i = 0; i < length; i++) {
indexRef[0] = i;
String token = parseToken(this.mPattern, indexRef);
i = indexRef[0]; int tokenLen = token.length();
if (tokenLen == 0) {
break;
} char c = token.charAt(0);
Rule rule;
Rule rule; Rule rule; Rule rule; Rule rule; Rule rule; Rule rule; Rule rule; Rule rule; Rule rule; Rule rule; Rule rule; Rule rule; Rule rule; Rule rule; Rule rule; Rule rule; Rule rule; Rule rule; Rule rule; switch (c) {
case 'G':
rule = new TextField(0, ERAs);
break;
case 'y': Rule rule;
if (tokenLen >= 4) {
rule = selectNumberRule(1, tokenLen);
} else {
rule = TwoDigitYearField.INSTANCE;
}
break;
case 'M': Rule rule;
if (tokenLen >= 4) {
rule = new TextField(2, months); } else { Rule rule;
if (tokenLen == 3) {
rule = new TextField(2, shortMonths); } else { Rule rule;
if (tokenLen == 2) {
rule = TwoDigitMonthField.INSTANCE;
} else
rule = UnpaddedMonthField.INSTANCE;
} }
break;
case 'd':
rule = selectNumberRule(5, tokenLen);
break;
case 'h':
rule = new TwelveHourField(selectNumberRule(10, tokenLen));
break;
case 'H':
rule = selectNumberRule(11, tokenLen);
break;
case 'm':
rule = selectNumberRule(12, tokenLen);
break;
case 's':
rule = selectNumberRule(13, tokenLen);
break;
case 'S':
rule = selectNumberRule(14, tokenLen);
break;
case 'E':
rule = new TextField(7, tokenLen < 4 ? shortWeekdays : weekdays);
break;
case 'D':
rule = selectNumberRule(6, tokenLen);
break;
case 'F':
rule = selectNumberRule(8, tokenLen);
break;
case 'w':
rule = selectNumberRule(3, tokenLen);
break;
case 'W':
rule = selectNumberRule(4, tokenLen);
break;
case 'a':
rule = new TextField(9, AmPmStrings);
break;
case 'k':
rule = new TwentyFourHourField(selectNumberRule(11, tokenLen));
break;
case 'K':
rule = selectNumberRule(10, tokenLen);
break;
case 'z': Rule rule;
if (tokenLen >= 4) {
rule = new TimeZoneNameRule(this.mTimeZone, this.mTimeZoneForced, this.mLocale, 1);
} else {
rule = new TimeZoneNameRule(this.mTimeZone, this.mTimeZoneForced, this.mLocale, 0);
}
break;
case 'Z': Rule rule;
if (tokenLen == 1) {
rule = TimeZoneNumberRule.INSTANCE_NO_COLON;
} else {
rule = TimeZoneNumberRule.INSTANCE_COLON;
}
break;
case '\'':
String sub = token.substring(1);
Rule rule; if (sub.length() == 1) {
rule = new CharacterLiteral(sub.charAt(0));
} else {
rule = new StringLiteral(sub);
}
break;
case '(': case ')': case '*': case '+': case ',': case '-': case '.': case '/': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case ':': case ';': case '<': case '=': case '>': case '?': case '@': case 'A': case 'B': case 'C': case 'I': case 'J': case 'L': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'T': case 'U': case 'V': case 'X': case 'Y': case '[': case '\\': case ']': case '^': case '_': case '`': case 'b': case 'c': case 'e': case 'f': case 'g': case 'i': case 'j': case 'l': case 'n': case 'o': case 'p': case 'q': case 'r': case 't': case 'u': case 'v': case 'x': default:
throw new IllegalArgumentException("Illegal pattern component: " + token);
} rules.add(rule);
} return rules;
} protected String parseToken(String pattern, int[] indexRef)
{
StringBuffer buf = new StringBuffer(); int i = indexRef[0];
int length = pattern.length(); char c = pattern.charAt(i);
if (((c >= 'A') && (c <= 'Z')) || ((c >= 'a') && (c <= 'z')))
{
buf.append(c);
}
while (i + 1 < length) {
char peek = pattern.charAt(i + 1);
if (peek == c) {
buf.append(c);
i++; continue; buf.append('\''); boolean inLiteral = false;
for (;
i < length; i++) {
c = pattern.charAt(i); if (c == '\'') {
if ((i + 1 < length) && (pattern.charAt(i + 1) == '\''))
{
i++;
buf.append(c);
} else {
inLiteral = !inLiteral;
}
} else { if ((!inLiteral) && (((c >= 'A') && (c <= 'Z')) || ((c >= 'a') && (c <= 'z'))))
{
i--;
break;
}
buf.append(c);
}
}
}
}
indexRef[0] = i;
return buf.toString();
} protected NumberRule selectNumberRule(int field, int padding)
{
switch (padding) {
case 1:
return new UnpaddedNumberField(field);
case 2:
return new TwoDigitNumberField(field);
}
return new PaddedNumberField(field, padding);
} public StringBuffer format(Object obj, StringBuffer toAppendTo, FieldPosition pos)
{
if ((obj instanceof Date))
return format((Date)obj, toAppendTo);
if ((obj instanceof Calendar))
return format((Calendar)obj, toAppendTo);
if ((obj instanceof Long)) {
return format(((Long)obj).longValue(), toAppendTo);
}
throw new IllegalArgumentException("Unknown class: " + (obj == null ? "<null>" : obj.getClass().getName()));
} public String format(long millis)
{
return format(new Date(millis));
} public String format(Date date)
{
Calendar c = new GregorianCalendar(this.mTimeZone);
c.setTime(date);
return applyRules(c, new StringBuffer(this.mMaxLengthEstimate)).toString();
} public String format(Calendar calendar)
{
return format(calendar, new StringBuffer(this.mMaxLengthEstimate)).toString();
} public StringBuffer format(long millis, StringBuffer buf)
{
return format(new Date(millis), buf);
} public StringBuffer format(Date date, StringBuffer buf)
{
Calendar c = new GregorianCalendar(this.mTimeZone);
c.setTime(date);
return applyRules(c, buf);
} public StringBuffer format(Calendar calendar, StringBuffer buf)
{
if (this.mTimeZoneForced) {
calendar = (Calendar)calendar.clone();
calendar.setTimeZone(this.mTimeZone);
}
return applyRules(calendar, buf);
} protected StringBuffer applyRules(Calendar calendar, StringBuffer buf)
{
Rule[] rules = this.mRules;
int len = this.mRules.length;
for (int i = 0; i < len; i++) {
rules[i].appendTo(buf, calendar);
}
return buf;
} public Object parseObject(String source, ParsePosition pos)
{
pos.setIndex(0);
pos.setErrorIndex(0);
return null;
} public String getPattern()
{
return this.mPattern;
} public TimeZone getTimeZone()
{
return this.mTimeZone;
} public boolean getTimeZoneOverridesCalendar()
{
return this.mTimeZoneForced;
} public Locale getLocale()
{
return this.mLocale;
} public int getMaxLengthEstimate()
{
return this.mMaxLengthEstimate;
} public boolean equals(Object obj)
{
if (!(obj instanceof FastDateFormat)) {
return false;
}
FastDateFormat other = (FastDateFormat)obj;
if (((this.mPattern == other.mPattern) || (this.mPattern.equals(other.mPattern))) && ((this.mTimeZone == other.mTimeZone) || (this.mTimeZone.equals(other.mTimeZone))) && ((this.mLocale == other.mLocale) || (this.mLocale.equals(other.mLocale))) && (this.mTimeZoneForced == other.mTimeZoneForced) && (this.mLocaleForced == other.mLocaleForced))
{
return true;
}
return false;
} public int hashCode()
{
int total = 0;
total += this.mPattern.hashCode();
total += this.mTimeZone.hashCode();
total += (this.mTimeZoneForced ? 1 : 0);
total += this.mLocale.hashCode();
total += (this.mLocaleForced ? 1 : 0);
return total;
} public String toString()
{
return "FastDateFormat[" + this.mPattern + "]";
} private void readObject(ObjectInputStream in)
throws IOException, ClassNotFoundException
{
in.defaultReadObject();
init();
} private static abstract interface Rule
{
public abstract int estimateLength(); public abstract void appendTo(StringBuffer paramStringBuffer, Calendar paramCalendar);
} private static abstract interface NumberRule
extends FastDateFormat.Rule
{
public abstract void appendTo(StringBuffer paramStringBuffer, int paramInt);
} private static class CharacterLiteral
implements FastDateFormat.Rule
{
private final char mValue; CharacterLiteral(char value)
{
this.mValue = value;
} public int estimateLength()
{
return 1;
} public void appendTo(StringBuffer buffer, Calendar calendar)
{
buffer.append(this.mValue);
}
} private static class StringLiteral
implements FastDateFormat.Rule
{
private final String mValue; StringLiteral(String value)
{
this.mValue = value;
} public int estimateLength()
{
return this.mValue.length();
} public void appendTo(StringBuffer buffer, Calendar calendar)
{
buffer.append(this.mValue);
}
} private static class TextField
implements FastDateFormat.Rule
{
private final int mField; private final String[] mValues; TextField(int field, String[] values)
{
this.mField = field;
this.mValues = values;
} public int estimateLength()
{
int max = 0;
int i = this.mValues.length; for (;;) { i--; if (i < 0) break;
int len = this.mValues[i].length();
if (len > max) {
max = len;
}
}
return max;
} public void appendTo(StringBuffer buffer, Calendar calendar)
{
buffer.append(this.mValues[calendar.get(this.mField)]);
}
} private static class UnpaddedNumberField
implements FastDateFormat.NumberRule
{
static final UnpaddedNumberField INSTANCE_YEAR = new UnpaddedNumberField(1); private final int mField; UnpaddedNumberField(int field)
{
this.mField = field;
} public int estimateLength()
{
return 4;
} public void appendTo(StringBuffer buffer, Calendar calendar)
{
appendTo(buffer, calendar.get(this.mField));
} public final void appendTo(StringBuffer buffer, int value)
{
if (value < 10) {
buffer.append((char)(value + 48));
} else if (value < 100) {
buffer.append((char)(value / 10 + 48));
buffer.append((char)(value % 10 + 48));
} else {
buffer.append(Integer.toString(value));
}
}
} private static class UnpaddedMonthField
implements FastDateFormat.NumberRule
{
static final UnpaddedMonthField INSTANCE = new UnpaddedMonthField(); public int estimateLength()
{
return 2;
} public void appendTo(StringBuffer buffer, Calendar calendar)
{
appendTo(buffer, calendar.get(2) + 1);
} public final void appendTo(StringBuffer buffer, int value)
{
if (value < 10) {
buffer.append((char)(value + 48));
} else {
buffer.append((char)(value / 10 + 48));
buffer.append((char)(value % 10 + 48));
}
}
} private static class PaddedNumberField
implements FastDateFormat.NumberRule
{
private final int mField; private final int mSize; PaddedNumberField(int field, int size)
{
if (size < 3)
{
throw new IllegalArgumentException();
}
this.mField = field;
this.mSize = size;
} public int estimateLength()
{
return 4;
} public void appendTo(StringBuffer buffer, Calendar calendar)
{
appendTo(buffer, calendar.get(this.mField));
} public final void appendTo(StringBuffer buffer, int value)
{
if (value < 100) {
int i = this.mSize; for (;;) { i--; if (i < 2) break;
buffer.append('0');
}
buffer.append((char)(value / 10 + 48));
buffer.append((char)(value % 10 + 48));
} else { int digits;
int digits;
if (value < 1000) {
digits = 3;
} else {
Validate.isTrue(value > -1, "Negative values should not be possible", value);
digits = Integer.toString(value).length();
}
int i = this.mSize; for (;;) { i--; if (i < digits) break;
buffer.append('0');
}
buffer.append(Integer.toString(value));
}
}
} private static class TwoDigitNumberField
implements FastDateFormat.NumberRule
{
private final int mField; TwoDigitNumberField(int field)
{
this.mField = field;
} public int estimateLength()
{
return 2;
} public void appendTo(StringBuffer buffer, Calendar calendar)
{
appendTo(buffer, calendar.get(this.mField));
} public final void appendTo(StringBuffer buffer, int value)
{
if (value < 100) {
buffer.append((char)(value / 10 + 48));
buffer.append((char)(value % 10 + 48));
} else {
buffer.append(Integer.toString(value));
}
}
} private static class TwoDigitYearField
implements FastDateFormat.NumberRule
{
static final TwoDigitYearField INSTANCE = new TwoDigitYearField(); public int estimateLength()
{
return 2;
} public void appendTo(StringBuffer buffer, Calendar calendar)
{
appendTo(buffer, calendar.get(1) % 100);
} public final void appendTo(StringBuffer buffer, int value)
{
buffer.append((char)(value / 10 + 48));
buffer.append((char)(value % 10 + 48));
}
} private static class TwoDigitMonthField
implements FastDateFormat.NumberRule
{
static final TwoDigitMonthField INSTANCE = new TwoDigitMonthField(); public int estimateLength()
{
return 2;
} public void appendTo(StringBuffer buffer, Calendar calendar)
{
appendTo(buffer, calendar.get(2) + 1);
} public final void appendTo(StringBuffer buffer, int value)
{
buffer.append((char)(value / 10 + 48));
buffer.append((char)(value % 10 + 48));
}
} private static class TwelveHourField
implements FastDateFormat.NumberRule
{
private final FastDateFormat.NumberRule mRule; TwelveHourField(FastDateFormat.NumberRule rule)
{
this.mRule = rule;
} public int estimateLength()
{
return this.mRule.estimateLength();
} public void appendTo(StringBuffer buffer, Calendar calendar)
{
int value = calendar.get(10);
if (value == 0) {
value = calendar.getLeastMaximum(10) + 1;
}
this.mRule.appendTo(buffer, value);
} public void appendTo(StringBuffer buffer, int value)
{
this.mRule.appendTo(buffer, value);
}
} private static class TwentyFourHourField
implements FastDateFormat.NumberRule
{
private final FastDateFormat.NumberRule mRule; TwentyFourHourField(FastDateFormat.NumberRule rule)
{
this.mRule = rule;
} public int estimateLength()
{
return this.mRule.estimateLength();
} public void appendTo(StringBuffer buffer, Calendar calendar)
{
int value = calendar.get(11);
if (value == 0) {
value = calendar.getMaximum(11) + 1;
}
this.mRule.appendTo(buffer, value);
} public void appendTo(StringBuffer buffer, int value)
{
this.mRule.appendTo(buffer, value);
}
} private static class TimeZoneNameRule
implements FastDateFormat.Rule
{
private final TimeZone mTimeZone; private final boolean mTimeZoneForced; private final Locale mLocale; private final int mStyle; private final String mStandard; private final String mDaylight; TimeZoneNameRule(TimeZone timeZone, boolean timeZoneForced, Locale locale, int style)
{
this.mTimeZone = timeZone;
this.mTimeZoneForced = timeZoneForced;
this.mLocale = locale;
this.mStyle = style; if (timeZoneForced) {
this.mStandard = FastDateFormat.getTimeZoneDisplay(timeZone, false, style, locale);
this.mDaylight = FastDateFormat.getTimeZoneDisplay(timeZone, true, style, locale);
} else {
this.mStandard = null;
this.mDaylight = null;
}
} public int estimateLength()
{
if (this.mTimeZoneForced)
return Math.max(this.mStandard.length(), this.mDaylight.length());
if (this.mStyle == 0) {
return 4;
}
return 40;
} public void appendTo(StringBuffer buffer, Calendar calendar)
{
if (this.mTimeZoneForced) {
if ((this.mTimeZone.useDaylightTime()) && (calendar.get(16) != 0)) {
buffer.append(this.mDaylight);
} else {
buffer.append(this.mStandard);
}
} else {
TimeZone timeZone = calendar.getTimeZone();
if ((timeZone.useDaylightTime()) && (calendar.get(16) != 0)) {
buffer.append(FastDateFormat.getTimeZoneDisplay(timeZone, true, this.mStyle, this.mLocale));
} else {
buffer.append(FastDateFormat.getTimeZoneDisplay(timeZone, false, this.mStyle, this.mLocale));
}
}
}
} private static class TimeZoneNumberRule
implements FastDateFormat.Rule
{
static final TimeZoneNumberRule INSTANCE_COLON = new TimeZoneNumberRule(true);
static final TimeZoneNumberRule INSTANCE_NO_COLON = new TimeZoneNumberRule(false); final boolean mColon; TimeZoneNumberRule(boolean colon)
{
this.mColon = colon;
} public int estimateLength()
{
return 5;
} public void appendTo(StringBuffer buffer, Calendar calendar)
{
int offset = calendar.get(15) + calendar.get(16); if (offset < 0) {
buffer.append('-');
offset = -offset;
} else {
buffer.append('+');
} int hours = offset / 3600000;
buffer.append((char)(hours / 10 + 48));
buffer.append((char)(hours % 10 + 48)); if (this.mColon) {
buffer.append(':');
} int minutes = offset / 60000 - 60 * hours;
buffer.append((char)(minutes / 10 + 48));
buffer.append((char)(minutes % 10 + 48));
}
} private static class TimeZoneDisplayKey
{
private final TimeZone mTimeZone; private final int mStyle; private final Locale mLocale; TimeZoneDisplayKey(TimeZone timeZone, boolean daylight, int style, Locale locale)
{
this.mTimeZone = timeZone;
if (daylight) {
style |= -2147483648;
}
this.mStyle = style;
this.mLocale = locale;
} public int hashCode()
{
return this.mStyle * 31 + this.mLocale.hashCode();
} public boolean equals(Object obj)
{
if (this == obj) {
return true;
}
if ((obj instanceof TimeZoneDisplayKey)) {
TimeZoneDisplayKey other = (TimeZoneDisplayKey)obj;
return (this.mTimeZone.equals(other.mTimeZone)) && (this.mStyle == other.mStyle) && (this.mLocale.equals(other.mLocale));
} return false;
}
} private static class Pair
{
private final Object mObj1; private final Object mObj2; public Pair(Object obj1, Object obj2)
{
this.mObj1 = obj1;
this.mObj2 = obj2;
} public boolean equals(Object obj)
{
if (this == obj) {
return true;
} if (!(obj instanceof Pair)) {
return false;
} Pair key = (Pair)obj; return (this.mObj1 == null ? key.mObj1 == null : this.mObj1.equals(key.mObj1)) && (this.mObj2 == null ? key.mObj2 == null : this.mObj2.equals(key.mObj2));
} public int hashCode()
{
return (this.mObj1 == null ? 0 : this.mObj1.hashCode()) + (this.mObj2 == null ? 0 : this.mObj2.hashCode());
} public String toString()
{
return "[" + this.mObj1 + ':' + this.mObj2 + ']';
}
}
}
package org.apache.commons.lang;

import java.util.Collection;
import java.util.Iterator;
import java.util.Map; public class Validate
{
public static void isTrue(boolean expression, String message, Object value)
{
if (!expression) {
throw new IllegalArgumentException(message + value);
}
} public static void isTrue(boolean expression, String message, long value)
{
if (!expression) {
throw new IllegalArgumentException(message + value);
}
} public static void isTrue(boolean expression, String message, double value)
{
if (!expression) {
throw new IllegalArgumentException(message + value);
}
} public static void isTrue(boolean expression, String message)
{
if (!expression) {
throw new IllegalArgumentException(message);
}
} public static void isTrue(boolean expression)
{
if (!expression) {
throw new IllegalArgumentException("The validated expression is false");
}
} public static void notNull(Object object, String message)
{
if (object == null) {
throw new IllegalArgumentException(message);
}
} public static void notNull(Object object)
{
if (object == null) {
throw new IllegalArgumentException("The validated object is null");
}
} public static void notEmpty(Object[] array, String message)
{
if ((array == null) || (array.length == 0)) {
throw new IllegalArgumentException(message);
}
} public static void notEmpty(Object[] array)
{
if ((array == null) || (array.length == 0)) {
throw new IllegalArgumentException("The validated array is empty");
}
} public static void notEmpty(Collection collection, String message)
{
if ((collection == null) || (collection.size() == 0)) {
throw new IllegalArgumentException(message);
}
} public static void notEmpty(Collection collection)
{
if ((collection == null) || (collection.size() == 0)) {
throw new IllegalArgumentException("The validated collection is empty");
}
} public static void notEmpty(Map map, String message)
{
if ((map == null) || (map.size() == 0)) {
throw new IllegalArgumentException(message);
}
} public static void notEmpty(Map map)
{
if ((map == null) || (map.size() == 0)) {
throw new IllegalArgumentException("The validated map is empty");
}
} public static void notEmpty(String string, String message)
{
if ((string == null) || (string.length() == 0)) {
throw new IllegalArgumentException(message);
}
} public static void notEmpty(String string)
{
if ((string == null) || (string.length() == 0)) {
throw new IllegalArgumentException("The validated string is empty");
}
} public static void noNullElements(Object[] array, String message)
{
notNull(array);
for (int i = 0; i < array.length; i++) {
if (array[i] == null) {
throw new IllegalArgumentException(message);
}
}
} public static void noNullElements(Object[] array)
{
notNull(array);
for (int i = 0; i < array.length; i++) {
if (array[i] == null) {
throw new IllegalArgumentException("The validated array contains null element at index: " + i);
}
}
} public static void noNullElements(Collection collection, String message)
{
notNull(collection);
for (Iterator it = collection.iterator(); it.hasNext();) {
if (it.next() == null) {
throw new IllegalArgumentException(message);
}
}
} public static void noNullElements(Collection collection)
{
notNull(collection);
int i = 0;
for (Iterator it = collection.iterator(); it.hasNext(); i++) {
if (it.next() == null) {
throw new IllegalArgumentException("The validated collection contains null element at index: " + i);
}
}
} public static void allElementsOfType(Collection collection, Class clazz, String message)
{
notNull(collection);
notNull(clazz);
for (Iterator it = collection.iterator(); it.hasNext();) {
if (!clazz.isInstance(it.next())) {
throw new IllegalArgumentException(message);
}
}
} public static void allElementsOfType(Collection collection, Class clazz)
{
notNull(collection);
notNull(clazz);
int i = 0;
for (Iterator it = collection.iterator(); it.hasNext(); i++) {
if (!clazz.isInstance(it.next())) {
throw new IllegalArgumentException("The validated collection contains an element not of type " + clazz.getName() + " at index: " + i);
}
}
}
}
import java.util.Calendar;

import org.apache.commons.lang.time.DateFormatUtils;
import org.junit.Test; /**
* @author 作者 E-mail:
* @version 创建时间:2015-11-3 下午06:50:56 类说明
*/
public class TestDateFormatUtils
{
@Test
public void test()
{
final Calendar calendar = Calendar.getInstance(); //yyyy-MM-dd'T'HH:mm:ss
final String ISO_DATETIME_FORMATE = DateFormatUtils.ISO_DATETIME_FORMAT.format(Calendar.getInstance());
System.out.println("ISO_DATETIME_FORMATE " + ISO_DATETIME_FORMATE + '\n'); //yyyy-MM-dd'T'HH:mm:ssZZ
final String ISO_DATETIME_TIME_ZONE_FORMAT = DateFormatUtils.ISO_DATETIME_TIME_ZONE_FORMAT.format(calendar);
System.out.println("ISO_DATETIME_TIME_ZONE_FORMAT " + ISO_DATETIME_TIME_ZONE_FORMAT + '\n'); //yyyy-MM-dd
final String ISO_DATE_FORMAT = DateFormatUtils.ISO_DATE_FORMAT.format(calendar);
System.out.println("ISO_DATE_FORMAT " + ISO_DATE_FORMAT + '\n'); //yyyy-MM-ddZZ
final String ISO_DATE_TIME_ZONE_FORMAT = DateFormatUtils.ISO_DATE_TIME_ZONE_FORMAT.format(Calendar.getInstance());
System.out.println("ISO_DATE_TIME_ZONE_FORMAT " + ISO_DATE_TIME_ZONE_FORMAT + '\n'); //'T'HH:mm:ss
final String ISO_TIME_FORMAT = DateFormatUtils.ISO_TIME_FORMAT .format(calendar);
System.out.println("ISO_TIME_FORMAT " + ISO_TIME_FORMAT + '\n'); //'T'HH:mm:ssZZ
final String ISO_TIME_TIME_ZONE_FORMAT = DateFormatUtils.ISO_TIME_TIME_ZONE_FORMAT.format(calendar);
System.out.println("ISO_TIME_TIME_ZONE_FORMAT " + ISO_TIME_TIME_ZONE_FORMAT + '\n');
}
}

  

ISO_DATETIME_FORMATE 2015-11-03T19:24:07

ISO_DATETIME_TIME_ZONE_FORMAT 2015-11-03T19:24:07+08:00

ISO_DATE_FORMAT 2015-11-03

ISO_DATE_TIME_ZONE_FORMAT 2015-11-03+08:00

ISO_TIME_FORMAT  T19:24:07

ISO_TIME_TIME_ZONE_FORMAT T19:24:07+08:00

最新文章

  1. python2-gst0.10制作静态包的补丁
  2. Windows Azure Web Site (13) Azure Web Site备份
  3. 关于GSM基站定位
  4. linux平台编译安装Poco C++
  5. Velocity(2)——引用
  6. 【Hadoop】搭建完全分布式的hadoop
  7. Summary of Amazon Marketplace Web Service
  8. 【项目】git的部署使用
  9. NSRunLoop的利用
  10. PHP cookie禁用时session 方案
  11. Cordova各个插件使用介绍系列(六)—$cordovaDevice获取设备的相关信息
  12. [日常] PKUWC 2018爆零记
  13. Spark排序与去重遇见的问题
  14. window下tomcat的内存溢出问题
  15. MySQL无法启动、服务没有报告任何错误&amp;初次登陆错误的解决
  16. [2017BUAA软工]结对项目
  17. java面试第五天
  18. Oracle简单的SQL处理
  19. 感觉比较好一些的vultr中文网
  20. POST请求出现中文乱码的问题

热门文章

  1. Apache Shiro 集成-Cas
  2. CAS协议 - CAS URIs
  3. Web资源文件的加载
  4. Codeforces 114A-Cifera(暴力)
  5. Kia&amp;#39;s Calculation(贪心)
  6. Mysql show Status参数详解
  7. WCF - 学习总目录
  8. 父页面iframe自动适应子页面的宽高度
  9. 第三篇:web之前端之JavaScript基础
  10. Jquery Call WebDav